有符号与无符号比较


#include <iostream>
int main()
{
    signed int a = 5;
    unsigned char b = -5;
    unsigned int c = a > b;
    std::cout << c << std::endl;
}

此代码打印0 .

谁能解释一下这里发生了什么?我猜编译器将ab转换为相同的类型(unsigend int也许(并进行比较。

让我们看看计算机如何存储值 b:
500000101,所以-5会被11111011,所以当你把它转换成unsigned char时,它会变成一些值11111011二进制的正数,大于00000101
所以,这就是为什么a = 00000101小于b(0 表示假(。

它正在打印0,因为a < b0表示假。 b的类型是unsigned的,因此它不能容纳负数。 正因为如此,-5变得2515更刨丝。

让我们转到main中的第三行 c0的值,因为a不大于 b 。这是因为在 C 中零被认为是假的,而其他一切都是真的。

关于b.大多数平台使用 2s 补码格式存储负整数。因此,当我们否定一个数字时,我们翻转所有位并添加 1。所以 -5 无符号变为大于 5 的0xfa。

相关内容

  • 没有找到相关文章

最新更新