以下程序给出了签名/未签名的不匹配警告:
#include <iostream>
int main()
{
unsigned int a = 2;
int b = -2;
if(a < b)
std::cout << "a is less than b!";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想在混合有符号和无符号的整数时理解这个问题.根据我的说法,int通常使用二进制补码存储在内存中.
所以,假设我有数字2.根据我的理解,它将在内存中表示如下:
00000000 00000000 00000000 00000010
Run Code Online (Sandbox Code Playgroud)
-2将表示为一个人的赞美加1,或者:
11111111 11111111 11111111 11111110
Run Code Online (Sandbox Code Playgroud)
有了两个赞美,没有像"符号和幅度方法"那样保留标志.如果没有符号位,为什么无符号整数能够存储更大的正数?混合有符号/无符号整数时可能出现的问题示例是什么?
我想在混合有符号和无符号的整数时理解这个问题.
a < b
通常的算术转换b被转换为a unsigned int,这是一个巨大的数字> a.
这里的表达式a < b与:
2U < (unsigned int) -2 其中:
2U < UINT_MAX - 1(在大多数两个补体系统中)是1(真实的).
有了两个赞美,没有像"符号和幅度方法"那样保留标志.
在二进制补码表示中,如果有符号数量的最高有效位是1,则该数字为负数.
| 归档时间: |
|
| 查看次数: |
510 次 |
| 最近记录: |