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

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

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

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

高位与低位

  • 低位:二进制中靠右的位,权值较小(例如 (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通常用移位寄存器实现;软件中,可以用查表法或直接位移法高效完成。

总结

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

http://www.xdnf.cn/news/2652.html

相关文章:

  • 国联股份卫多多与北京慧闻科技(集团)签署战略合作协议
  • Kubernetes(k8s)学习笔记(三)--部署 Kubernetes Master
  • 完美解决.NET Framework 4.0 中 System.Drawing 库不支持 WebP 格式的图像处理
  • Android adb 安装应用失败(安装次数限制)
  • 【现代深度学习技术】循环神经网络07:通过时间反向传播
  • 爬虫学习笔记(二)--web请求过程
  • 从代码学习机器学习 - UMAP降维算法 scikit-learn版
  • 【Linux】基于环形队列的生产消费者模型
  • 机器学习第三篇 模型评估(交叉验证)
  • 腾讯云服务器独立ip服务器优点是什么?服务器需要固定ip吗?
  • WebRtc08:WebRtc信令服务器实现
  • 简单分析自动驾驶发展现状与挑战
  • cURL 入门:10 分钟学会用命令行发 HTTP 请求
  • MySQL慢查询分析工具:EXPLAIN
  • Awesome-Embodied-AI:具身AI机器人领域最全资源汇总(含人形机器人,多足机器人,灵巧手等精选资源)
  • C++11线程间通信同步与Linux中MySQL连接池实现
  • XLSX.utils.sheet_to_json设置了blankrows:true,但无法获取到开头的空白行
  • JDBC 使用流程详解
  • rag增强检索-基于关键词检索的混合检索模式
  • vue响应式原理——vue2和vue3的响应式实现区别
  • 非结构化数据解析
  • wsl(8) -- 图形界面
  • 封装el-autocomplete,接口调用
  • Ubuntu安装brew
  • OSI 模型(开放系统互联模型)
  • FEKO许可安装
  • CCF推荐学术会议-C(网络与信息安全):SAC 2025
  • Python学习之路(六)-图像识别
  • 数字化转型的未来趋势:从工具到生态,聚焦生态合作、绿色转型与全球化布局
  • Vue3 Element Plus el-tabs数据刷新方法