gpt4 book ai didi

c++ - 有符号/无符号整数不匹配

转载 作者:搜寻专家 更新时间:2023-10-31 01:14:48 25 4
gpt4 key购买 nike

以下程序给出有符号/无符号不匹配警告:

#include <iostream>

int main()
{
unsigned int a = 2;
int b = -2;

if(a < b)
std::cout << "a is less than b!";

return 0;
}

我试图理解混合有符号和无符号整数时的问题。据我所知,int 通常使用二进制补码存储在内存中。

所以,假设我有数字 2。根据我的理解,它将在内存中表示如下:

00000000 00000000 00000000 00000010

而-2将表示为一个人的赞美加1,或者:

11111111 11111111 11111111 11111110

有了二进制补码,就没有像“符号与大小法”那样为符号保留位。如果没有符号位,为什么 unsigned int 能够存储更大的正数?混合有符号/无符号整数时可能发生的问题示例是什么?

最佳答案

I'm trying to understand the problem when it comes to mixing signed and unsigned ints.

a < b

通过通常的算术转换b转换为 unsigned int , 这是一个巨大的数字 > a .

这里是表达式 a < b与以下内容相同:

2U < (unsigned int) -2与以下内容相同:

2U < UINT_MAX - 1 (在大多数二进制补码系统中)是 1 (正确)。

With two's compliment there is no bit reserved for the sign like the "Sign-and-magnitude method".

如果有符号数的最高有效位是 1,则用二进制补码表示, 为负数。

关于c++ - 有符号/无符号整数不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10871300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com