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
答案 0 :(得分:7)
您显示的位模式对于有符号整数表示-1,如果它表示无符号整数,则表示最大值。
当你说“给-1”时,你应该看看你是如何检查它的。例如,如果使用printf打印它,则应确保使用无符号格式说明符。
答案 1 :(得分:-1)
uint32_t y = 0xFFFFFFFF; //给-1我不明白为什么它是否定的?
它为负的原因是,因为根据定义,当使用有符号类型时,任何设置了高位有效位的数字都将被解释为负数。在您的情况下,该值通常不会被视为负数,因为uint被视为无符号。
因此,这意味着:例如:
当被认为是16位整数时,0xFFFF为-1,但使用32位整数时,相同的值不为负。
如果使用了适当的转换,编译器会扩展签名。所以如果适当提升到32位int,上面的值仍然会变为-1。