计算机的原码反码补码计算题(关于计算机的原码)
ps:这些都是本人自己原创总结的笔记欢迎大家一起学习,我来为大家讲解一下关于计算机的原码反码补码计算题?跟着小编一起来看一看吧!
计算机的原码反码补码计算题
ps:这些都是本人自己原创总结的笔记欢迎大家一起学习。
这是底层重点,下面的各级规定必须背会
四个位运算符
- 二进制的最高位是符号位:0表示正数,1表示负数
- 正数的原码,反码和补码都一样。
- 负数的反码=它的原码符号位不变,其他位取反(0->1,1->0)
- 负数的补码=它的反码 1,负数的反码=它的补码-1
- 0的反码,补码都是0
- java没有无符号数,换言之java中的数都是有符号的。
- 在计算机运行时都是以补码的方式运行的。
- 当我们看它的运行结果时,要看它的原码
举例
- 按位与&:两位全为1,结果为1,否则为0
- 按位或|:两位有一位为1,结果为1,否则为0
- 按位异或^:一个为0,一个为1,结果为1,否则为0
- 按位取反~:0->1,1->0
2&3=?
2的补码:
0000 0000 0000 0000 0000 0000 0000 0010
3的补码:
0000 0000 0000 0000 0000 0000 0000 0011
2&3的补码:
0000 0000 0000 0000 0000 0000 0000 0010
2&3的原码:
0000 0000 0000 0000 0000 0000 0000 0010
~-2=?
-2的反码:
1111 1111 1111 1111 1111 1111 1111 1101
-2的补码:
1111 1111 1111 1111 1111 1111 1111 1110
取反:
0000 0000 0000 0000 0000 0000 0000 0001
原码:
0000 0000 0000 0000 0000 0000 0000 0001
~2=?
2的补码:
0000 0000 0000 0000 0000 0000 0000 0010
取反:
1111 1111 1111 1111 1111 1111 1111 1101
补码转反码:
1111 1111 1111 1111 1111 1111 1111 1100
反码再变回原码:
1000 0000 0000 0000 0000 0000 0000 0011
2|3=?
2的补码:
0000 0000 0000 0000 0000 0000 0000 0010
3的补码:
0000 0000 0000 0000 0000 0000 0000 0011
或运算:
0000 0000 0000 0000 0000 0000 0000 0011
补码变反码变原码:
0000 0000 0000 0000 0000 0000 0000 0011
2^3=?
2的补码:
0000 0000 0000 0000 0000 0000 0000 0010
3的补码:
0000 0000 0000 0000 0000 0000 0000 0011
异或运算:
0000 0000 0000 0000 0000 0000 0000 0001
位运算的妙用可直接使用 (m&1)==1?奇数:偶数 获得结果*,如:
boolean a = (3&1)==1 //true boolean b = (4&1)==1 //false
不用临时变量交换两个整数的值:
int a = 3, b = 4 a = a^b b = a^b // b = 3 a = a^b // a = 4
原理:
异或0具有保持的特点,即1010^0000 = 1010;
异或1具有翻转的特点,即1010^1111 = 0101;
由此可推导:
b^(a^b) = a
a^(b^(a^b)) = b
三个位移运算符
- 算数右移>>:低位溢出。符号位不变,并用符号位补溢出的高位。
- 算数左移<<:符号位不变,低位左移补0
- 逻辑右移>>>:也叫无符号右移,低位溢出高位补0
,
int a=1>>2; //相当于1/2/2 int a=1<<2; //相当于1*2*2
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com