c 语言中无符号整数和有符号整数的区别
下面的文章将探讨 c 编程语言中带符号和无符号 int 之间的区别。
c 语言中 signed 和 unsigined int 之间的区别
signed int 和 unsigned int 之间的区别并不像某些人想象的那么复杂。signed int 通常表示为 int,但在处理 unsigned int 时,我们必须写为 unsigned int。
int 是一种数据类型而 unsigned 只是一个关键字这一事实具有与硬件级别相关的特定功能。这种独特的目的在两者之间产生了更显着的差异,将在以下部分中进一步详细介绍。
-
int数据类型是signed并且必须具有至少-32767到32767的范围作为其最小范围要求。limits.h指的是实际值作为int min和int max的对应值。 -
unsigned int具有从0到65535(含)的最小范围,实际最大值由头文件的uint_max常量定义。如果值为无符号,则不需要将位之一用于符号。
这意味着你会收到更多种类的正面编码,而不会牺牲任何负面编码。
内存要求
首先,检查 signed int 和 unsigned int 在计算机系统中占用了多少内存空间。
-
int的内存要求是4 bytes,乘以8是32 bits。4x8= 32 bits -
此外,
unsigned int还占用了4 字节的内存空间,加起来为32 位。-
在
int数据类型中,32-bits中最左边的bit指定为sign bit,指示整数是正数还是负数。1表示负值,而0表示正值。 -
当前可以存储在
int变量中的整数范围是-(2^31)到2^31-1,等于-2 147 483 648到2 147 483 647)。
-
在
当一个负数输入计算机时,它会以二进制形式表示为该数字的 2 补码。正因为如此,内存的开始位总是被设置为 1,而计算机只要看到初始位被设置为 1,就会知道它遇到了一个负数。
每当我们访问该数字时,它都会通过对其应用 2 的补码来恢复其原始形式。然而,对于 unsigned int 数据类型,没有像 sign bit 这样的 bit。
因此,它现在拥有所有 32 位可供我们用来存储数据。unsigned int 中可以存储的整数范围是从 0 到 2^32-1,相当于 0 到 4、294、967、295,包括的。
unsigned int 数据类型的变量是计算机通常以二进制格式存储数据的地方。
让我们举个例子。首先,我们将给变量 x 一个无符号类型的初始值。
然后,当我们试图将负数保存在 unsigned int 变量 x 中时,计算机使用 123 的 2's 补码将其表示为负数。然后将该表示存储在 x` 变量的内存中。
unsigned int x;
x = -123;
因此,当我们将负数 -123 保存在 int 数据类型的变量 y 中时,计算机将 -123 的 2 的补码表示为负整数,然后将其存储在 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 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中将整数转换为字符
发布时间:2024/01/03 浏览次数:131 分类:c语言
-
本教程介绍了在c中将整数转换为字符的不同方法。在c编程语言中,将整数转换为字符在各种情况下都很重要。在c中,字符是以ascii值表示的,因此转换过程相对简单。
发布时间:2023/05/07 浏览次数:364 分类:c语言
-
本文介绍了如何在 c 语言中使用 typedef enum。使用 enum 在 c 语言中定义命名整数常量 enum 关键字定义了一种叫做枚举的特殊类型。
发布时间:2023/05/07 浏览次数:129 分类:c语言
-
本文演示了如何在 c 语言中使用前缀增量与后缀增量运算符。c 语言中 i 和 i 记号的主要区别
发布时间:2023/05/07 浏览次数:275 分类:c语言
-
本文演示了如何在 c 语言中获取当前工作目录。使用 getcwd 函数获取当前工作目录的方法
发布时间:2023/05/07 浏览次数:177 分类:c语言
-
本文介绍了如何在 c 语言中使用位掩码。使用 struct 关键字在 c 语言中定义位掩码数据
发布时间:2023/05/07 浏览次数:212 分类:c语言
-
本文演示了如何在 c 语言中使用标准库排序函数。使用 qsort 函数对 c 语言中的整数数组进行排序
c 语言中的 extern 关键字
发布时间:2023/05/07 浏览次数:131 分类:c语言
-
本文介绍了如何在 c 语言中使用 extern 关键字。c 语言中使用 extern 关键字来声明一个在其他文件中定义的变量

