原码补码反码运算
1. 运算符
~ 取反
>> 左移
<< 右移
>>> 无符号右移
& 与
| 或
^ 异或
2. 运算注意
~ & ^ | 中不管是正数还是负数全部转成二进制的补码进行运算
求原码 反码 补码时,符号位不变
对于正数,反码=原码=补码
对于负数,符号位不变,反码=原码取反,补码=反码+1
+=
a += 1,+= 不提升数据类型
a = a + 1,提升数据类型
对于左移和右移
正数:左移和右移均补0
负数:左移补0,右移补1
无符号右移:不区分正数和负数,高位全用0补充
3. 运算
~10
10 = 8 + 2 = 2^3 + 2^1
= 0000 1010
补码为 0000 1010 补码
取反后为:
1111 0101 补码
1111 0100 反码
1000 1011 原码
得到:~10 = -11
~-22
-22 = -(16 + 4 + 2) = -(2^4 + 2^2 + 2^1)
= 1001 0110
原码为 1001 0110
反码为 1110 1001
补码为 1110 1010
取反后为:
0001 0101 补码
0001 0101 反码
0001 0101 原码
得到:~-22 = 21
-20 & 35
-20 = -(16 + 4) = -(2^4 + 2^2)
= 1001 0100
原码为 1001 0100
反码为 1110 1011
补码为 1110 1100
35 = 32 + 2 + 1 = 2^5 + 2^1 + 2^0
= 0010 0011
原码=反码=补码=0010 0011
-20 -> 1110 1100
35 -> 0010 0011
进行&运算 0010 0000
原码=反码=补码=0010 0000
得到:-20 & 35 = 2^5 = 32
-20 ^ -30
-20 = -(16 + 4) = -(2^4 + 2^2)
= 1001 0100
原码为 1001 0100
反码为 1110 1011
补码为 1110 1100
-30 = 16 + 8 + 4 + 2 = 2^4 + 2^3 + 2^2 + 2^1
= 1001 1110
补码为 1001 1110
反码为 1001 1101
原码为 1110 0010
-20 -> 1110 1100
-30 -> 1110 0010
进行^运算 0000 1110
原码=反码=补码=0000 1110
得到:-20 ^ -30 = 2^1 + 2^2 + 2^3 = 14
-20 | 28
-20 = -(16 + 4) = -(2^4 + 2^2)
= 1001 0100
原码为 1001 0100
反码为 1110 1011
补码为 1110 1100
28 = 16 + 8 + 4 = 2^4 + 2^3 + 2^2
= 0001 1100
原码=反码=补码=0001 1100
-20 -> 1110 1100
28 -> 0001 1100
进行|运算 1111 1100
补码为 1111 1100
反码为 1111 1011
原码为 1000 0100
得到:-20 ^ 28 = 2^2 = -4
35 >> 2
35 = 32 + 2 + 1 = 2^5 + 2^1 + 2^0
= 0010 0011
原码=反码=补码=0010 0011
>>后的结果0000 1000 补码
0000 1000 反码
0000 1000 原码
结果为: 8
-20 >> 2
-20 = -(16 + 4) = -(2^4 + 2^2)
= 1001 0100
原码为 1001 0100
反码为 1110 1011
补码为 1110 1100
>>后的结果1111 1011补码
1111 1010 反码
1000 0101 原码
结果为:-5
35 << 2
35 = 32 + 2 + 1 = 2^5 + 2^1 + 2^0
= 0010 0011
原码=反码=补码=0010 0011
<<后的结果为1000 1100 补码
1000 1011 反码
1111 0100 原码
结果为: 2^2 + 2^4 + 2^5 + 2^6 = -116
结果错误,解决方案如下:
原码=反码=补码=0000 0000 0000 0000 0010 0011
<<后的结果为0000 0000 0000 0000 1000 1100 补码=反码=原码
结果为: 2^2 + 2^3 + 2^7 = 4 + 8 + 128 = 140
-20 << 2
-20 = -(16 + 4) = -(2^4 + 2^2)
= 1001 0100
原码为 1001 0100
反码为 1110 1011
补码为 1110 1100
<<后的结果为1011 0000 补码
1010 1111 反码
1101 0000 原码
结果为2^4 + 2^6 = 16 + 64 = -80
4. switch
switch()括号里面传递的数据只能是byte short int char String 枚举类
本文来自博客园,作者:jsqup,转载请注明原文链接:https://www.cnblogs.com/jsqup/p/16381547.html