在C ??中,unsigned int T = 0xFFFFFFFF等于-1。它不应该在未签名之后作为2赞美吗?

时间:2013-07-14 18:49:39

标签: c

unsigned int与uint32_t相同?这是32位无符号整数而不是2赞成对吗?

uint32_t y = 0xFFFFFFFF;   // gives -1  i dont get why is it negative?
uint8_t x = 0b11111111;    // gives 255 i understand this

2 个答案:

答案 0 :(得分:7)

您显示的位模式对于有符号整数表示-1,如果它表示无符号整数,则表示最大值。

当你说“给-1”时,你应该看看你是如何检查它的。例如,如果使用printf打印它,则应确保使用无符号格式说明符。

答案 1 :(得分:-1)

  

uint32_t y = 0xFFFFFFFF; //给-1我不明白为什么它是否定的?

它为负的原因是,因为根据定义,当使用有符号类型时,任何设置了高位有效位的数字都将被解释为负数。在您的情况下,该值通常不会被视为负数,因为uint被视为无符号。

因此,这意味着:例如:

当被认为是16位整数时,0xFFFF为-1,但使用32位整数时,相同的值不为负。

如果使用了适当的转换,编译器会扩展签名。所以如果适当提升到32位int,上面的值仍然会变为-1。