文章目录
1、原码、反码、补码、移码
- 正数:正数的原码、反码、补码是相同的
- 负数:
- 原码:最高位表示的是符号位,负数符号位为1,正数的符号位为0;
- 反码:负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
- 补码:补码=反码+1;符号位可以被进位。
- 移码:补码的基础上将符号位取反。移码只能用于表示整数,不能表示小数
- 补码装换为原码:与原码转换为补码相同:–>反码+1;
2、二进制、八进制、十进制、十六进制之间的转换
3、浮点型十进制转换
4、负数二进制转换
5. 逻辑运算
何为真? : 一切非零值为真;
何为假?: 0 代表假;
1. 逻辑与 &&
当且仅当两个运算对象为真(非零)时结果为真;
int x=100;
int y=50;
cout<<(x&&y)<<endl; //1
int x=100;
int y=0;
cout<<(x&&y)<<endl; //0
2. 逻辑或 ||
只要两个对象中一个真(非零)结果就为真;
int x=100;
int y=0;
cout<<(x||y)<<endl; //1
int x=0;
int y=0;
cout<<(x||y)<<endl; //0
3. 逻辑非 !
将运算对象的值取反后返回;
** 非 0 取反 ⇒ 0; 0 取反⇒ 1; **
int x=100;
cout<<(!x)<<endl; //0
int x=0;
cout<<(!x)<<endl; //1
此处值取反
与按位取反
是不同的,按位取反
需要转换为二进制
,再进行按位取反;
6. 位运算
将其转化为 二进制
在进行位运算
;
1. 位与 &
35: 0 0 1 0 0 0 1 1
47: 0 0 1 0 1 1 1 1
&
————————————————————
35: 0 0 1 0 0 0 1 1
int x=35;
int y=47;
cout<<(x&y)<<endl; //35
2. 位或 |
35: 0 0 1 0 0 0 1 1
47: 0 0 1 0 1 1 1 1
|
————————————————————
47: 0 0 1 0 1 1 1 1
int x=35;
int y=47;
cout<<(x|y)<<endl; //47
3. 位取反 ~
35: 0 0 1 0 0 0 1 1
~
————————————————————
92: 1 1 0 1 1 1 0 0 //第一位是符号位
int x=35;
cout<<(!x)<<endl; // -36
从上面可以看出 35 取反后程序输出与 按位取反的结果不一致?
由于负数在计算中一般用补码表示:所以我们应该将取反得到在原码转换为补码
35: 0 0 1 0 0 0 1 1
~
————————————————————
92: 1 1 0 1 1 1 0 0 //原码
1 0 1 0 0 0 1 1 //反码 :符号位不变,其余位取反
+1
————————————————————
-36: 1 0 1 0 0 1 0 0 //第一位是符号位
4. 位异或 ^
相同取0 ,异同为1;
35: 0 0 1 0 0 0 1 1
47: 0 0 1 0 1 1 1 1
^
————————————————————
12: 0 0 0 0 1 1 0 0
int x=35;
int y=47;
cout<<(x^y)<<endl; // 12