有符号数和无符号数
- 有符号数
- 无符号数
- 负整数转化为无符号数
- 编程测试
有符号数
有符号数中有一个符号位,正数为0,负数为1.
例如
int a=3;
因为c++中的int占32位
3的二进制数表示为
0000 0000 0000 0000 0000 0000 0000 0011
-3的二进制数表示为
1000 0000 0000 0000 0000 0000 0000 0011
无符号数
不存在符号位
举例
int a=-3;
int占32位
3的二进制表示为
原码:0000 0000 0000 0000 0000 0000 0000 0011
补码:0000 0000 0000 0000 0000 0000 0000 0011
-3的二进制数表示为
原码:1000 0000 0000 0000 0000 0000 0000 0011
补码:1111 11111 1111 1111 1111 1111 1111 1101
其实就是负数的补码
负整数转化为无符号数
整数int转无符号数
直接读取负数的补码
为了快速运算
若z是负整数,那么z对应的无符号数表达式如下:
编程测试
#include<iostream>
#include<math.h>
using namespace std;
int main(int argc, char* argv)
{
int a = -3;
printf("占字节数:%d\n", sizeof(a));
printf("a=%u\n", a);//输出其无符号数
return 0;
}
运行结果,得出int占4个字节,一个字节占8位,就是32位的二进制位。
编译器-3的无符号数是4294967293
使用计算器检验结果是否是4294967293
计算
ok,没问题!