位运算符
1 ~ 按位取反,指的是按照补码进行取反
正数取反
~8
转为原码:0000 1000
转为补码:0000 1000
补码取反:1111 0111
负数转为原码:1000 1001 -- 符号位, 负数原码 = (补码- 1) 再取反
~8 = -9
负数取反
~ -2
转为原码:1000 0010
转为补码:1111 1110
补码取反:0000 0001
转为原码:0000 0001 -- 正数原码等于反码
~ -2 = 1
2 & 按位与,针对二进制,只要有一个为0,结果为0
8 ----> 1000
7 ----> 0111
8 & 7 ----> 0000 ,结果为0
3 | 按位或,针对二进制,只要有一个为1,结果就为1
8 ----> 1000
7 ----> 0111
8 | 7 ----> 1111 ,结果为15
4 ^ 按位异或,针对二进制,相同的为0,不同的为1
8 ----> 1000
7 ----> 0111
8 | 7 ----> 1111 ,结果为15
5 << 向左移位,转换成二进制后向左移动2位,后面用0补齐
8 << 2 相等于乘以2的二次方,结果为32
6 >> 向右移位,转换成二进制后向右移动2位
8 >> 2 相等于除以2的二次方,结果为2
1000 -> 0010
负数右移,高位补一
-2 >> 1 = -1
1010 ->
1101(反码) ->
1110(补码) ->
1110 >>1 = 1111(补码右移1位)
1111反码为1110
1110 的原码为 1001
1001 表示-1
7 >>> 无符号右移,忽略符号位,空位都以0补齐
10 进制转2进制的时候,因为2进制数一般分8位、 16位、32位以及64位 表示一个10进制数,所以在转换过程中,最高位会补零。
在计算机中负数采用2进制的补码表示,10进制转为2进制得到的是原码,将原码按位取反得到的是反码,反码加1得到补码。
2进制的最高位是符号位,0表示正,1表示负。
>>> 与 >> 唯一的不同是它无论原来的最左边是什么数,统统都用0填充。
比如,byte是8位的,-1表示为byte型是11111111(补码表示法)
b>>>4就是无符号右移4位,即00001111,这样结果就是15。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?