当前位置: 首页 > news >正文

二进制、高位低位、位移操作与进制转换全解

二进制、高位低位、位移操作与进制转换全解

在计算机科学中,理解高位与低位左移与右移进制转换位运算非常重要。这篇文章用清晰直观的方式梳理这些基本概念。

高位与低位

  • 低位:二进制中靠右的位,权值较小(例如 (2^0, 2^1))。
  • 高位:二进制中靠左的位,权值较大(例如 (2^7, 2^8))。

示例:在 1101 中,最左边的 1 是高位,对应 (2^3),最右边的 1 是低位,对应 (2^0)。

左移 (<<) 与右移 (>>)

操作效果补位
左移 <<所有位向左移动,低位补0数值×2
右移 >>所有位向右移动,高位补符号位数值/2(正数)

小例子:

  • 0011 << 1 = 0110 (3 左移变 6)
  • 1100 >> 1 = 0110 (12 右移变 6)

二进制与八进制的关系

三位二进制正好可以对应一个八进制数字,因为 (2^3=8)。

三位二进制八进制
0000
0011
0102
0113
1004
1015
1106
1117

二进制转八进制步骤

  1. 从右向左每三位分一组(不足补0)。
  2. 每组转为一个八进制数字。

例:1101011

  • 分组:001 101 011
  • 转换:1 5 3
  • 结果:153

八进制转二进制步骤

  1. 每个八进制数字转成对应的三位二进制数。

例:153

  • 1 -> 001
  • 5 -> 101
  • 3 -> 011
  • 结果:1101011

十进制与二、八进制转换

十进制转二进制

  • 除2取余,倒序排列。

例:13 → 1101

二进制转十进制

  • 每个位×2的对应幂次,结果相加。

例:1101 → 13

十进制转八进制

  • 除8取余,倒序排列。

例:83 → 123

八进制转十进制

  • 每个位×8的对应幂次,结果相加。

例:123 → 83

位运算速查

运算符名称规则示例
&位与都为1结果才为11010 & 1100 = 1000
``位或有1结果为1
^位异或不同为1,相同为01010 ^ 1100 = 0110
~位非取反~1010 = 0101
<<左移乘以20011 << 1 = 0110
>>右移除以2(正数)1100 >> 1 = 0110

补码表示和符号扩展

补码表示

  • 正数:最高位是0,直接按原码存储。
  • 负数:最高位是1,用补码存储:原码取反加一。

例:

  • +5(8位)= 00000101
  • -5(8位)= 11111011

符号扩展

当把较小的数据类型扩展到较大的类型时:

  • 无符号数:高位补0。
  • 有符号数:根据最高位补0或1,保持正负性不变。

例:

  • 8位 -5 (11111011) 扩展为 16位 -5 (11111111 11111011)

大端序与小端序

大端序(Big-Endian)

  • 高位字节排在前面,低位字节排在后面。
  • 常见于网络协议。

小端序(Little-Endian)

  • 低位字节排在前面,高位字节排在后面。
  • 常见于x86架构计算机。

例:32位整数 0x12345678

  • 大端:12 34 56 78
  • 小端:78 56 34 12

高效位操作技巧

快速乘除2

  • n << 1 等同于 n × 2
  • n >> 1 等同于 n ÷ 2(正数)

判断奇偶性

  • n & 1
    • 结果是1,奇数;
    • 结果是0,偶数。

取绝对值(有符号数)

一种位操作绝对值写法:

int abs(int n) {int mask = n >> 31;return (n + mask) ^ mask;
}

解释:

  • n >> 31:得到全0(正)或全1(负)。
  • 正数不变,负数反码加一,即取绝对值。

位图和位集合优化技巧

  • 使用一位(bit)来表示一个元素的存在与否,大大节省内存。
  • 比如要表示100万个元素是否出现,只需要约125KB内存,而不是100万个bool变量。
  • 常用操作:
    • 置位bitmap[index/8] |= (1 << (index%8))
    • 清位bitmap[index/8] &= ~(1 << (index%8))
    • 查询bitmap[index/8] & (1 << (index%8))

应用场景:去重、布隆过滤器、集合运算优化。

CRC校验与位操作

  • CRC(循环冗余校验)用于数据传输或存储时检测错误。
  • 核心是通过位移和异或操作不断处理数据位。

简单示意:

  1. 将数据左移一位。
  2. 如果最高位是1,则将结果与多项式做异或。
  3. 重复步骤直到所有位处理完。

硬件中,CRC通常用移位寄存器实现;软件中,可以用查表法或直接位移法高效完成。

总结

掌握高位与低位概念,理解左移右移的本质,熟练进行二进制、八进制、十进制之间的转换,同时善用位运算,是搞定计算机底层原理、提高程序性能的重要基础。

相关文章:

  • 汽车行业EDI教程——北美X12标准 AS2连接配置与实现
  • 晶振PCB设计核心要点与规范
  • nigx屏蔽无用爬虫
  • 如何实现Redis和Mysql中数据双写一致性
  • 什么是设备管理?设备管理核心功能是什么?
  • 30分钟上架鸿蒙原生应用,即时通信IM UI组件库全面适配HarmonyOS 原
  • 任意波形发生器——2路同步DA模拟量输出卡
  • ASP.NET MVC​ 入门指南四
  • Python爬虫实战:获取软科网最新特定专业大学排名数据并做分析,为高考填报志愿做参考
  • 解决Ubuntu20.04重启出现显卡驱动异常的问题(操作记录)
  • JLink,程序烧写流程、步骤
  • AI大模型学习十三、白嫖腾讯Cloud Studio AI环境 通过Ollama+Dify+DeepSeek构建生成式 AI 应用-安装
  • 漫反射实现+逐像素漫反射+逐像素漫反射实现
  • Miniconda Windows10版本下载和安装
  • 通过深度学习推进增材制造:当前进展与未来挑战综述
  • 项目管理 - 1.Maven
  • Windows 图形显示驱动-待机休眠优化
  • Java SE(4)——方法详解
  • 如何使用极狐GitLab 议题看板?
  • 【25软考网工】第四章(2)WLAN通信技术、WLAN频谱与信道
  • 银川市长信箱被指乱回复:问诗词大会、答工程欠款,官方称工作失误
  • 对话|男篮国手杨瀚森:参加NBA选秀,去更大的舞台追梦
  • 苏迪曼杯即将在厦门打响,国羽向创纪录的14冠进军
  • “爱泼斯坦案”关键证人弗吉尼亚·朱弗雷自杀身亡
  • 临沂文旅集团被诉侵权,原告每年三百余起类案
  • “80后”李岩已任安徽安庆市领导