ps :这些都是本人原创总结的笔记本,欢迎大家一起学习。
这是底层的重点,以下各级规定必须背下来
二进制的最高有效位是符号位。 0表示正数,1表示负数的正数原码。 反码和补码都一样。 负数的反码=其原码的位不变。 其他位取反(0- 1,1-0 )负数的补数=其反码1,负数的反码=其补数-10的反码。 补数都是0java没有无符号数。 换言之,java中的数都是有符号的。 计算机运行时都是互补运行的。 查看其执行结果时,原代码
四个位运算符
的位数和: 2位数均为1,结果为1。 否则,0位数或|:2位数中1位数为1,结果为1。 否则,0位数异或^ :一个是0,一个是1,结果是1。 否则,每0位数取反~:0-1,1 -。的补数:
0000 0000 0000 0000 0000 0000 0000 0010
的补数:
0000 0000 0000 0000 0000 0000 0000 0011
23个补数:
0000 0000 0000 0000 0000 0000 0000 0010
23个源代码:
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=?
的补数:
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
的补数:
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=?
的补数:
0000 0000 0000 0000 0000 0000 0000 0010
的补数:
0000 0000 0000 0000 0000 0000 0000 0011
异或运算:
0000 0000 0000 0000 0000 0000 0000 0001
举例
可以直接使用(m1)==1? 奇数:偶数即可得到结果*,例如:布尔纳=(31 )==1//真
布尔型态=(41 )==1//假
不使用临时变量交换两个整数值:
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;
可以从这里导出:
乙^ (甲^乙)=甲
甲^ (乙^ )乙^乙) )=乙
位运算的妙用
算术右移:下位溢出。 不变更编码比特,用编码比特来弥补溢出的高位比特。 算术左移(符号位不变,低位左移补0逻辑右移)也称为无符号右移,低位溢出高位补0int a=12; 相当于一半2/2int a=12; 相当于1*2*2