无符号范围&签名int

时间:2016-01-17 18:27:52

标签: c integer

#include <stdio.h>

int main(int argc, char **args){
 int d=4294967295;
 unsigned e= -1;
 printf("\n%u\n%d\n%d\n%u\n%lu\n",d,d,e,e,sizeof(int));

 return 0;
}

输出:

4294967295
-1
-1
4294967295
4

问题是,如果signedunsigned整数都可以通过应用合适的格式字符串来显示所有类型的整数,那么unsigned首先需要什么? ?

2 个答案:

答案 0 :(得分:3)

你是对的(在使用两个补码并具有32位整数的机器上),0xFFFFFFFF显示为-1 %d,但是{ {1}} 4294967295

但严格来说,这是未定义的行为。

但有符号和无符号变量之间的真正区别在于它们的算术解释。主要区别是

  • 与比较:-1&lt; 0,但是0 <0 4294967295。
  • 乘法和除法。

答案 1 :(得分:1)

Unsigned可以保持更大的正值,而不是负值。 Unsigned使用前导位作为值的一部分,而签名版本使用最左侧位来标识数字是正数还是负数。有符号整数可以包含正数和负数。