有人可以解释为什么unsigned int取负值?一个unsigned int
应该只正值.
来自维基百科:
单词,长,双字,长字,整数
无符号:从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);
}
Run Code Online (Sandbox Code Playgroud)
Value of uint32 i = -1
Run Code Online (Sandbox Code Playgroud)
以下是我在cpp标准中找到的解释,我无法解释.
对于每个有符号整数类型,存在相应的(但不同的)无符号整数类型:"unsigned char","unsigned short int","unsigned int"和"unsigned long int",每个占用相同的量存储并具有与对应的有符号整数类型40相同的对齐要求(3.9); 也就是说,每个有符号整数类型具有与其对应的无符号整数类型相同的对象表示.有符号整数类型的非负值范围是相应无符号整数类型的子范围,每个对应的有符号/无符号类型的值表示应相同.
4无符号整数,声明无符号整数,应遵守算术模2n的定律,其中n是整数特定大小的值表示中的位数
40)关于类型之间的对应关系以及指定它们的类型说明符序列,请参见7.1.5.2.
41)这意味着无符号算术不会溢出,因为无法由结果无符号整数类型表示的结果以比模式生成的无符号整数类型所表示的最大值大1的数量减少.