二进制的原码、反码、补码及相关计算
1.二进制的最高位是符号位,0表示正数,1表示负数
2.正数的原码、反码、补码都一样
3.负数的反码=它原码符号位不变,其他位取反(0->1,1->0)
4.负数的补码=它的反码+1
5.0的反码、补码、都是0
6.php没有无符号数,就是说php中的都是有符号的
7.在计算机运算的时候都是以补码的方式来运行的
1 如: 2 以下实例都以4个字节举例说明 3 1 ---->原码 00000000 00000000 00000000 00000001 4 1 ---->反码 00000000 00000000 00000000 00000001 5 1 ---->补码 00000000 00000000 00000000 00000001 6 7 -1 --->原码 10000000 00000000 00000000 00000001 8 -1 --->反码 11111111 11111111 11111111 11111110 //符号位不变,其他位取反 9 -1 --->补码 11111111 11111111 11111111 11111111 //等于反码+1
1 求~2的结果 2 2 --->原码 00000000 00000000 00000000 00000010 //正数的原码、反码、补码都一样,所以可以直接按位运算 3 2的补码取反 4 00000000 00000000 00000000 00000010 ===> 11111111 11111111 11111111 11111101 //取反后变为负数,再按照负数求反码的规则得到反码 5 取反后结果还是补码,再求反码 6 11111111 11111111 11111111 11111101 ===> 11111111 11111111 11111111 11111100 //负数的反码=它的补码-1 7 再根据反码求原码 8 11111111 11111111 11111111 11111100 ===> 10000000 00000000 00000000 00000011 //负数符号位不变,0变1,1变0 9 10000000 00000000 00000000 00000011 ===> -3 10 所以~2 = -3
1 求~-5的结果 2 -5 --->原码 10000000 00000000 00000000 00000101 3 根据原码得到反码 4 -5的原码取反 --->11111111 11111111 11111111 11111010 //符号位不变(0->1,1->0) 5 根据反码得到补码 6 -5的补码 ---> 11111111 11111111 11111111 11111011 //负数的补码=反码+1 7 再将补码取反 8 11111111 11111111 11111111 11111011 ===> 00000000 00000000 00000000 00000100 //计算机底层运算都是在补码的基础上计算的,所以先得到补码再逐位取反 9 00000000 00000000 00000000 00000100 是正数,它的反码、原码和补码一样 10 00000000 00000000 00000000 00000100 ===>4 11 所以~-5 = 4
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 聊一聊 操作系统蓝屏 c0000102 的故障分析
· SQL Server 内存占用高分析
· .NET Core GC计划阶段(plan_phase)底层原理浅谈
· .NET开发智能桌面机器人:用.NET IoT库编写驱动控制两个屏幕
· 用纯.NET开发并制作一个智能桌面机器人:从.NET IoT入门开始
· 20250116 支付宝出现重大事故 有感
· 一个基于 Roslyn 和 AvalonEdit 的跨平台 C# 编辑器
· 推荐一款非常好用的在线 SSH 管理工具
· 聊一聊 操作系统蓝屏 c0000102 的故障分析
· .NET周刊【1月第1期 2025-01-05】