计算机二进制运算
正数原码、反码、补码相同
负数的原码是先根据正数的二进制确定,最高位补 1
负数的反码是在原码的基础上保持符号位不变,其它进制位取反操作
负数的补码是在负数的反码基础上加 1
在计算机当中因为硬件的关系是没有减法操作的,只有加法操作
下面就举例说明 5 - 7 的运算过程
5 - 7 可以等价于 5 + (-7)
5 是正数,其原码、反码、补码均是 0000 0101
-7 的原码计算过程,根据正数 7 得出二进制表示方式为 0111,把剩下的位置补成 8 位,最高位是 1,所以 -7 的原码为 1000 0111
-7 的反码是在 -7 的原码为基础上,符号位不变,其它进制位取反操作,所以 -7 的反码为 1111 1000
-7 的补码是在 -7 反码的基础上加 1,所以 -7 的补码是 1111 1001
计算机底层进行运算是通过补码来进行的,5 + (-7) 的二进制形式补码相加如下
0000 0101
1111 1001
---------
1111 1110
我们得到的 1111 1110 是补码,最高位是 1,所以它是个负数,将补码形式的 1111 1110 要反推成原码
补码形式的 1111 1110 的反码是补码减 1,所以其反码是 1111 1101
反码形式的 1111 1101 的原码是保持符号位不变,其它进制位取反,所以其原码是 1000 0010
1000 0010 由于最高位是 1,所以它是个负数, 0010 转成二进制是 2,所以 5 + (-7) 的最终计算结果是 -2
1、按位与(&): 如果都是 1 ,则为 1
2、按位或(|): 如果都是 0 ,则为 0
3、按位异或(^): 如果相同则为 0 ,如果不同则为 1
4、左移(<<n): 操作数乘以 2 的 n 次方
5、右移(>>n): 操作数除以 2 的 n 次方
6、无符号右移动=(>>>n): 操作数除以 2 的 n 次方,和右移的区别是,右移会用该操作数的符号位置的数字补全,而无符号右移是用 0 来补全
【推荐】国内首个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速度为什么快?