第十五章 - DDL-Killer/The-road-of-Linxu-Group2024 GitHub Wiki

二进制数、位和字节

按位逻辑运算符

  1. 二进制反码或按位取反:~
    • 不会改变原值
  2. 按位与:&
  3. 按位或:|
  4. 按位异或:^
    • 两个运算对象中相应的位只有一个为1,结果为1

用法:掩码

  • &
  • 把掩码中的0看作不透明,1看作透明,只有掩码的1可见

用法:打开位(设置位)

  • 其他位保持不变,使用|
  • 把MASK中需要“打开”的值传递给FLAG,同时保证FLAG不变

用法:关闭位(清空位)

  • 对MASK取反码,然后进行按位与(&)运算

用法:切换位

  • 无论值是0还是1,a^0都是自身
  • 用一个MASK,不变的位为0,变的位为1
  • ^

用法:检查位的值

  • 比较哪一位,使用MASK就与哪一位相同,其余相反
  • 先跟MASK进行按位与&,确保除了比较的哪一位之外,其余位相同
  • 然后带括号进行==比较

移位运算符

  1. 左移:<<
    • 左侧运算对象每一位的值向左移动其右侧运算对象指定的位数
    • 左侧对象移出左末端位的值丢失,用0填充空出的位置
  2. 右移:>>
    • 右移运算对象每一位的值向右移动其右侧运算对象指定的位数
    • 对于无符号类型,用0填充
    • 对于有符号类型,取决于机器
  3. 用法:移位运算符
    • 针对2的幂提供快速有效的乘除法

位字段

  • 位字段是一个signed int 或unsigned int 类型变量中的一组相邻的位
  • 位字段通过一个结构声明来建立,该结构声明为每个字段提供标签,并确定该字段的宽度 image
  • 该声明,prnt包含4个1位的字段,通过普通的结构成员运算符(.)单独给这些字段赋值