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

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

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

高位与低位

  • 低位:二进制中靠右的位,权值较小(例如 (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)。

三位二进制 八进制
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7

二进制转八进制步骤

  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结果才为1 1010 & 1100 = 1000
` ` 位或 有1结果为1
^ 位异或 不同为1,相同为0 1010 ^ 1100 = 0110
~ 位非 取反 ~1010 = 0101
<< 左移 乘以2 0011 << 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,偶数。

取绝对值(有符号数)

一种位操作绝对值写法:

c 复制代码
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通常用移位寄存器实现;软件中,可以用查表法或直接位移法高效完成。

总结

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

相关推荐
做cv的小昊9 小时前
【TJU】信息检索与分析课程笔记和练习(1)认识文献
经验分享·笔记·学习·搜索引擎·全文检索
读创商闻10 小时前
崇明岛西滩湿地:离都市最近的候鸟观测笔记
笔记
蒙奇D索大10 小时前
【11408学习记录】考研英语长难句拆解三步法:三步拆解2020年真题,攻克阅读难点
笔记·学习·考研·改行学it
悠闲漫步者10 小时前
第2章 MCS-51单片机的串口和最小系统(学习笔记)
笔记·学习·51单片机
莫白媛10 小时前
Linux创作笔记综合汇总篇
linux·运维·笔记
Wpa.wk11 小时前
Tomcat的安装与部署使用 - 说明版
java·开发语言·经验分享·笔记·tomcat
Vincent_Zhang23311 小时前
专题:所有状语类型(持续补充)
笔记
wdfk_prog11 小时前
[Linux]学习笔记系列 -- [fs]buffer
linux·笔记·学习
海奥华211 小时前
进程调度算法 笔记总结
linux·运维·服务器·笔记·学习
即将进化成人机12 小时前
验证码生成 + Redis 暂存 + JWT 认证
数据库·redis·笔记