位运算符:含义与使用
参考:
https://zhuanlan.zhihu.com/p/404138226(知乎:位运算符的含义)
https://www.jianshu.com/p/f0dbabf5f08c(简书:运算符的基本使用)
位运算符
1,共7种位运算符&,|,^,~,<<,>>,>>>
2,需要是二进制格式的数据,因为要按位运算
& 含义:按位与
说明:吧参与运算的两个数对应的二进制位相与,只有对应的二进制位均为1时,结果的对应为才为1,否则为0。
例子:
9&5相当于00001001&00000101,运算结果为00000001.输出结果是1。
场景:
1,判断奇偶性
| 含义:按位或
说明:把参数运算的两个数对应的二进制位相或,只要对应的两个二进制位有一个为1时,其结果就为1.
例子:
9|5相当于00001001|00000101,运算结果就是00001101,输出结果是13。
1|2|4|8相当于0001|0010|0100|1000,运算结果就是00001111,输出结果是15。
场景:
1,作为标志位
^ 含义:按位异或
说明:把参数运算的两个数对应的二进制位相异或,对应位上的两个二进制数字不同时,结果为1,否则为0。
例子:
1^1=0,1^0=1,0^0=0,0^1=1
~ 含义:取反
说明:把运算数的各个二进制位按位求反,本运算符最令人费解,且没找到使用场景
参考:http://www.edu118.com/news/20190426/jswz090506.html
计算方法(十进制表示):~x = -(x+1)
例子:
~9相当于~(00001001),运算结果11110110。输出结果为-10。 ~-9相当于~(11110111),运算结果00001000。输出结果为8。 1,因为计算机是用补码表示负数 2,负数的补码为反码+1 3,负数的反码为 除符号位(第一位)外其他位取反
<< 含义:左移
说明:m<<n是指把m对应的二进制数的各个二进制位向左移n位,高位丢弃,低位用0补齐。
例子:
设a=3,a<<4指把00000011的各二进制位向左移动4位,结果为00110000(十进制48)。
>> 含义:右移
说明:m>>n是指把m对应的二进制数的各二进制位向右移n位,低位丢弃,高位用0补齐,符号被保留。
例子:
设a=15,a>>2表示把00001111右移2位,结果为00000011(十进制3)。
>>> 含义:无符号右移
说明:m>>>n是指把m对应的二进制数的各二进制位向右移n位,低位丢弃,高位用0补齐。
例子:
19>>>2产生4,因为10011移位2位向右变为100,它是4。对非负数值,补零右移和带符号右移产生相同结果。
原码、反码、补码
参考:https://blog.csdn.net/chenchao2017/article/details/79733278(原码,反码,补码原理)
现在计算机普遍使用补码表示负数。
正数的原码、反码、补码相同
123的原码:00000000 00000000 00000000 01111011 123的反码:00000000 00000000 00000000 01111011 123的补码:00000000 00000000 00000000 01111011
负数的原码是按照绝对值转换后,最高位补1;反码是除符号位外,所有位取反;补码为反码加1;
-123的原码:10000000 00000000 00000000 01111011 -123的反码:11111111 11111111 11111111 10000100 -123的补码:11111111 11111111 11111111 10000101
使用场景
作为标志位
举例:
red = 0001 blue = 0010 yellow = 0100 0111:代表红蓝黄 0101:代表红黄
分类:
计算机基础
【推荐】国内首个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速度为什么快?