迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > C语言 >

C 语言中无符号整数和有符号整数的区别

作者:迹忆客 最近更新:2023/05/09 浏览次数:

下面的文章将探讨 C 编程语言中带符号和无符号 int 之间的区别。


C 语言中 signedunsigined Int 之间的区别

signed intunsigned int 之间的区别并不像某些人想象的那么复杂。signed int 通常表示为 int,但在处理 unsigned int 时,我们必须写为 unsigned int

int 是一种数据类型而 unsigned 只是一个关键字这一事实具有与硬件级别相关的特定功能。这种独特的目的在两者之间产生了更显着的差异,将在以下部分中进一步详细介绍。

  • int 数据类型是 signed 并且必须具有至少 -3276732767 的范围作为其最小范围要求。limits.h 指的是实际值作为 INT MININT MAX 的对应值。
  • unsigned int 具有从 065535(含)的最小范围,实际最大值由头文件的 UINT_MAX 常量定义。如果值为无符号,则不需要将之一用于符号

这意味着你会收到更多种类的正面编码,而不会牺牲任何负面编码。


内存要求

首先,检查 signed intunsigned int 在计算机系统中占用了多少内存空间。

  1. int 的内存要求是 4 bytes,乘以 832 bits

    4x8= 32 bits
    
  2. 此外,unsigned int 还占用了 4 字节 的内存空间,加起来为 32 位

    • int 数据类型中,32-bits 中最左边的 bit 指定为 sign bit,指示整数是正数还是负数。1 表示负值,而 0 表示正值。
    • 当前可以存储在 int 变量中的整数范围是 -(2^31)2^31-1,等于 -2 147 483 6482 147 483 647)。

当一个负数输入计算机时,它会以二进制形式表示为该数字的 2 补码。正因为如此,内存的开始总是被设置为 1,而计算机只要看到初始被设置为 1,就会知道它遇到了一个负数。

每当我们访问该数字时,它都会通过对其应用 2 的补码来恢复其原始形式。然而,对于 unsigned int 数据类型,没有像 sign bit 这样的 bit

因此,它现在拥有所有 32 位可供我们用来存储数据。unsigned int 中可以存储的整数范围是从 02^32-1,相当于 04294967295,包括的。

unsigned int 数据类型的变量是计算机通常以二进制格式存储数据的地方。

让我们举个例子。首先,我们将给变量 x 一个无符号类型的初始值。

然后,当我们试图将负数保存在 unsigned int 变量 x 中时,计算机使用 1232's 补码将其表示为负数。然后将该表示存储在 x` 变量的内存中。

unsigned int x;
x = -123;

因此,当我们将负数 -123 保存在 int 数据类型的变量 y 中时,计算机将 -1232 的补码表示为负整数,然后将其存储在 y 变量的记忆。

int y;
y = -123;

Unsigned int 变量仅以标准二进制形式保存正值;当我们试图通过 x 变量的内存访问它的内存时,没有保留符号位。结果,计算机不需要转换,之前保存的 2 补码被恢复并显示为常规二进制数。

printf("%d\n",x);

当我们试图访问变量 y 的内存时,计算机确定它是 int 数据类型。然后它检查了 32-bit 最左边位置的 bit,发现它是 1

结果,它再次使用了 2 的补码,添加了一个负号(-),并打印了结果。

printf("%d\n",y);

完整的源代码:

#include <stdio.h>

int main() {
  unsigned int x;
  x = -123;
  int y;
  y = -123;
  printf("%d\n",x);
  printf("%d\n",y);
  return 0;
}

输出:

-123
-123

结论

现在我们熟悉了有符号整数和无符号整数之间的主要区别,你还应该意识到这两种数据形式都有一些优点和缺点,其平衡完全取决于你的需求。

例如,如果你希望存储大量数字,你应该使用 unsigned int,并且你确信永远不会有负值。否则,如果你使用 int 数据类型会有所帮助。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 C 语言中使用 typedef enum

发布时间:2023/05/07 浏览次数:181 分类:C语言

本文介绍了如何在 C 语言中使用 typedef enum。使用 enum 在 C 语言中定义命名整数常量 enum 关键字定义了一种叫做枚举的特殊类型。

C 语言中的静态变量

发布时间:2023/05/07 浏览次数:151 分类:C语言

本文介绍了如何在 C 语言中使用静态变量。在 C 语言中使用 static 变量在函数调用之间保存变量值

C 语言中生成随机数

发布时间:2023/05/07 浏览次数:64 分类:C语言

本文演示了如何在 C 语言中生成随机数。使用 rand 和 srand 函数在 C 语言中生成随机数

C 语言中的 i++ 与++i

发布时间:2023/05/07 浏览次数:83 分类:C语言

本文演示了如何在 C 语言中使用前缀增量与后缀增量运算符。C 语言中++i 和 i++ 记号的主要区别

C 语言中获取当前工作目录

发布时间:2023/05/07 浏览次数:182 分类:C语言

本文演示了如何在 C 语言中获取当前工作目录。使用 getcwd 函数获取当前工作目录的方法

C 语言中的位掩码

发布时间:2023/05/07 浏览次数:126 分类:C语言

本文介绍了如何在 C 语言中使用位掩码。使用 struct 关键字在 C 语言中定义位掩码数据

C 语言中的排序函数

发布时间:2023/05/07 浏览次数:181 分类:C语言

本文演示了如何在 C 语言中使用标准库排序函数。使用 qsort 函数对 C 语言中的整数数组进行排序

C 语言中的 extern 关键字

发布时间:2023/05/07 浏览次数:114 分类:C语言

本文介绍了如何在 C 语言中使用 extern 关键字。C 语言中使用 extern 关键字来声明一个在其他文件中定义的变量

C 语言中的 #ifndef

发布时间:2023/05/07 浏览次数:186 分类:C语言

本文介绍了如何在 C 语言中使用 ifndef。在 C 语言中使用 ifndef 保护头文件不被多次包含 C 语言中的头文件用于定义同名源文件中实现的函数的接口。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便