-8

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
4

2 回答 2

7

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

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

于 2013-07-14T18:54:01.080 回答
-1

uint32_t y = 0xFFFFFFFF;// 给出 -1 我不明白为什么它是负数?

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

因此,这意味着例如:

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

如果使用了适当的转换,编译器将扩​​展签名。因此,如果将上述值适当提升为 32 位 int,则仍将变为 -1。

于 2013-07-14T19:08:26.707 回答