计算机2进制位运算
按位与(&)
0101&1001 = 0001 //有一个为0则结果为0
按位或(|)
0101|1001 = 1101 //有一个为1则结果为1
按位取反(~)
~0101 = 1010 //0变1,1变0
按位异或(^)
0101^1001 = 1100 //对应bit位相同,则结果位取0,否则取1
- 0异或任何数=任何数
- 1异或任何数=任何数取反
-
任何数异或自己=把自己置为0
按位异或常见用途:
1.使某些特定的位翻转 (reverse)
2.实现两个值的交换,而不必使用临时变量a=9(1001), b=12(1100) a = a^b //0101 b = b^a //1001 a = a^b //1100
3.快速判断两个值是否相等 return (a^b)== 0
原码:一个数绝对值的2进制码就是该数的原码
反码:对一个数的原码取反,得到的就是该数的反码
补码:对一个数的反码+1,得到的就是该数的补码(最小值除外)
移位运算
<< 左移位
计算规则:将2进制数据整体向左移动一位,高位自动溢出,低位补0
n = 00000100 10010001 00111111 01010101
m=n<<1 0000100 10010001 00111111 010101010
k=n<<2 000100 10010001 00111111 0101010100
j=n<<8 10010001 00111111 01010101 00000000
>> 带符号右移
计算规则:规则: 当高位(符号位)为1的时候,高位补1,保持负数符号,低位舍弃 当高位(符号位)为0的时候,高位补0,低位舍弃
n = -50 11111111 11111111 11111111 11001110 -50
m=n>>1 111111111 11111111 11111111 1100111 -25
k=n>>2 1111111111 11111111 11111111 110011 -13
n = 50 00000000 00000000 00000000 00110010 50
m=n>>1 000000000 00000000 00000000 0011001 25
k=n>>2 0000000000 00000000 00000000 001100 12
>>> 无符号右移
计算规则:无论是正数还是负数,高位补0,低位舍弃
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
2018-10-23 c/c++ makeFile
2018-10-23 Java-->实现断点续传(下载)