签名与无符号比较

时间:2015-06-25 11:53:12

标签: c++ compare unsigned signed

< pre>< code> #include< iostream> int main() {     signed int a = 5;     unsigned char b = -5;     unsigned int c = a> b;     std :: cout<< c<<的std :: ENDL; } < /代码>< /预> < p>此代码打印< code> 0< / code&gt ;.< / p> < p>有人可以解释一下这里发生了什么吗?我猜这个编译器转换< code> a< / code>和< code> b< / code>相同的类型(< code> unsigend int< / code>)可以比较它们。< / p>

3 个答案:

答案 0 :(得分:5)

让我们看看计算机如何存储值b:
500000101,因此-511111011,因此,当您将其转换为unsigned char时,它将变为某个带有值{{1}的正数在二进制文件中,它大于11111011 那就是00000101小于a = 00000101的原因(0表示错误)。

答案 1 :(得分:2)

正在打印0,因为a < b0表示错误。 b的类型为unsigned,因此无法保留负数。因为-5变为251,它比5更重要。

答案 2 :(得分:2)

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

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