我想知道无符号整数的工作原理。
#include <iostream>
using namespace std;
int main(){
int a = 50; //basic integer data type
unsigned int b; //unsigned means the variable only holds positive values
cout << "How many hours do you work? ";
cin >> b;
cout << "Your wage is " << b << " pesos.";
}
但是当我输入-5时,输出为
Your wage is 4294967291 pesos.
当我输入-1时,输出为
Your wage is 4294967295 pesos.
假定无符号整数保持正值。这是怎么发生的? 而且我只知道基本的C ++。我不明白。
答案 0 :(得分:3)
从有符号到无符号整数的转换是通过以下规则(§[conv.integral])完成的:
- 整数类型的prvalue可以转换为另一个类型的prvalue 整数类型。
[...]- 如果目标类型是无符号的,则结果为 值是与源整数一致的最小无符号整数 (模2 n ,其中 n 是用于表示 无符号类型)。
在您的情况下,unsigned
显然是32位类型,因此将-5模2 32 进行模降低。因此2 32 = 4,294,967,296和4,294,967,296-5 = 4,294,967,291。