有人可以解释为什么 unsigned int 取负值吗?一个unsigned int
应该只取正值。
From 维基百科 http://en.wikipedia.org/wiki/Integer_%28computer_science%29:
字、长、双字、长字、整数
无符号:从 0 到 4,294,967,295,等于 2^32 − 1
#include <stdio.h>
typedef unsigned int uint32;
int main()
{
uint32 i;
int x = -1;
i = x%32;
printf("\n\n Value of uint32 i = %d", i);
return (0);
}
Output:
Value of uint32 i = -1
以下是我在 cpp 标准中找到的解释,我无法解释。
对于每种有符号整数类型,都存在相应的(但不同的)无符号整数类型:“unsigned char”、“unsigned Short int”、“unsigned int”和“unsigned long int”,每种类型占用相同的数量的存储并且具有与相应的有符号整数类型相同的对齐要求(3.9)40);也就是说,每个有符号整数类型与其对应的无符号整数类型具有相同的对象表示形式。有符号整数类型的非负值范围是相应的无符号整数类型的子范围,并且每个相应的有符号/无符号类型的值表示应相同。
4 无符号整数,声明为无符号,应遵循算术模 2n 的法则,其中 n 是该特定大小的整数的值表示中的位数
40) 关于类型和指定它们的类型说明符序列之间的对应关系,请参见 7.1.5.2。
41) 这意味着无符号算术不会溢出,因为无法由生成的无符号整数类型表示的结果会以比生成的无符号整数可以表示的最大值大 1 的数为模进行减少
类型。
您使用了错误的标志printf
。它应该是%u
.
printf("\n\n Value of uint32 i = %u", i);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)