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 枚举类
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?