Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 有符号与无符号比较 #包括 int main() { 有符号整数a=5; 无符号字符b=-5; 无符号整数c=a>b; std::cout_C++_Compare_Unsigned_Signed - Fatal编程技术网

C++ 有符号与无符号比较 #包括 int main() { 有符号整数a=5; 无符号字符b=-5; 无符号整数c=a>b; std::cout

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

让我们看看计算机如何存储值b:
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;
}