[Note]C语言位操作

Bit Operation

Background :

 

二进制整数,符号位,补码

 

二进制小数 : 只能精确表示1/2的幂之和的小数

 

八进制:每个数位对应3个二进制位

十六进制:每个数位对应4个二进制位

原码:最高位为符号位,0正,1负

反码:除符号位外,各位转置(取反)

补码:正数的原码&负数的(反码 + 1) 【该编码被计算机采用】

 

位字段:

         把连续的位看成一段,如:八进制,十六进制

 

Basis Operation : 只读函数

       逻辑:     |(按位或)         &(按位且)        ~(按位取反)   ^(按位异或,判断真假性是否不同)

         移位:  >>(右移)  <<(左移)

Bit Application :

逻辑

1.      求相反数

原理:原码与补码的转换。无论正负,各位取反再加一. 

例: ++( Value ^max_int )  ==  - value

 

2.      掩码屏蔽不感兴趣的位 (读)

原理:0 & #m = 0, 1 & #n = #n,

掩盖不必要位,获取所需位

例:1010 1011(来源) &0000 0101(掩码) = 0000 0001(获得#0和#2的位状态)

         注意:不要越界,掩码宽度不应超过来源码

 

3.      位的开闭(| 一真则真, & 一假则假)(写)

原理:0 & #m= 0, 1| #n = 1.( 0|#x=#x 和0&#y=0)

无论来源的位状态,强制改变特定位而不影响其他位

例:1111 0101 | 00000010 = 1111 0111(打开#1,其余不变)

         1111 0101 & 0000 0011 = 0000 0001(#0#1不改变,其余关闭)

 

4.      位的转置

转置:真假性的对立面           即!p

原理:1 ^ #m = ~#m

例:0110 1101 ^ 11111111 = 1001 0010

 

工具表:0,1与4种逻辑位运算的排列组合,找到自己的所需.

         分析:从#0开始,迭代思考

移位

有符号值,缺位的填补处理视机器而定

1.      左移<<

原理:value<< n   //表示value * 2n

例:(129) 1000 0001<< 1 = 0000 0010  (2)   

2.      右移<<

原理:value >> m  //表示value / 2m,右溢出部分表示value % 2m

例:(18) 0001 0010>> 2 = 0000 0100 (4)……10 (2)

         (类似地,十进制中,小数点的移动来实现乘除10)

 

实例:

①  判断奇偶

原理:value % 2 ? 1 :0

做法:提取最低位,判断1或0

 

②  提取符号位

原理:获得最高位

做法:value << ( sizeof(int) * 8 - 1 )

 

③  交换变量值

原理:m^n^n(^m) = m(n)

做法:a^=b, b^=a, a^=b;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值