前提知识:在计算机中,所有的算术运算(包括加法、减法、乘法和除法)都是使用补码(Two’s complement)来表示和计算整数的。
数值 | 原码 | 反码 | 补码 |
---|---|---|---|
1 | 0000 0001 | 0000 0001 | 0000 0001 |
-1 | 1000 0001 | 1111 1110 | 1111 1111 |
-128 | 1000 0000(数据位与符号位重合) | 1111 1111 | 1000 0000 |
127 | 0111 1111 | 0111 1111 | 0111 1111 |
0 | 0000 0000 | 0000 0000 | 0000 0000 |
计算器中十进制对应的二进制也都是补码:
比如-128:
-1:
127:
举例说明算数计算中的数据类型提升带来的影响:
#include<iostream>
using namespace std;
int main()
{
// int32_t的数据范围[-2147483648,2147483647]
cout << "INT32_MAX value: " << INT32_MAX << "; INT32_MIN value: " << INT32_MIN << endl;
// uint32_t的数据范围[0, 4294967295]
cout << "UINT32_MAX value: " << UINT32_MAX << endl;
uint32_t a = 100000000;
uint8_t b = 1;
uint32_t c