C++ 有符号与无符号比较 #包括 int main() { 有符号整数a=5; 无符号字符b=-5; 无符号整数c=a>b; std::cout
让我们看看计算机如何存储值b:C++ 有符号与无符号比较 #包括 int main() { 有符号整数a=5; 无符号字符b=-5; 无符号整数c=a>b; std::cout,c++,compare,unsigned,signed,C++,Compare,Unsigned,Signed,让我们看看计算机如何存储值b: 5是00000101,因此-5将是11111 011,因此,当您将其转换为无符号字符时,它将变成二进制值11111 011的正数,大于00000101 这就是为什么a=00000101小于b(0表示false).它正在打印0,因为a
5
是00000101
,因此-5
将是11111 011
,因此,当您将其转换为无符号字符时,它将变成二进制值11111 011
的正数,大于00000101
这就是为什么a=00000101
小于b
(0表示false).它正在打印0
,因为a
和0
的意思是假。b
的类型是无符号的
,所以它不能保存负数。因为-5
变成251
,比5
更重。让我们转到main
的第三行
c
取0
的值,因为a
不大于b
。这是因为在c中,零被认为是假的,其他的都是真的
关于b
。大多数平台使用2s补码格式存储负整数。因此,当我们对一个数字求反时,我们翻转所有位并加上1。因此-5无符号变为大于5的0xfa。您可能想了解。您可能会在这里找到一个答案:您可以想象无符号字符b=-5
as首先声明一个int
-5,然后将其分配给无符号字符
。分配只使用较低的位if-5,因此它b
将被删除。请引用规定此行为的标准源。
#include <iostream>
int main()
{
signed int a = 5;
unsigned char b = -5;
unsigned int c = a > b;
std::cout << c << std::endl;
}