设为首页 加入收藏

TOP

15.1.3 掩码
2013-10-12 06:52:48 来源: 作者: 【 】 浏览:98
Tags:15.1.3 掩码

15.1.3  掩码

如果要对一个整数中的某些位进行操作,怎样表示这些位在整数中的位置呢?可以用掩码(Mask)来表示。比如掩码0x0000ff00表示对一个32位整数的8~15位进行操作,举例如下。

  1. 1.取出8~15位。  
  2. unsigned int a, b, mask = 0x0000ff00;  
  3. a = 0x12345678;  
  4. b = (a & mask) >> 8; /* 0x00000056 */ 
  5. 这样也可以达到同样的效果:  
  6. b = (a >> 8) & ~(~0U << 8);  
  7. 2.将8~15位清零。  
  8. unsigned int a, b, mask = 0x0000ff00;  
  9. a = 0x12345678;  
  10. b = a & ~mask; /* 0x12340078 */ 
  11. 3.将8~15位置1。  
  12. unsigned int a, b, mask = 0x0000ff00;  
  13. a = 0x12345678;  
  14. b = a | mask; /* 0x1234ff78 */ 

习题

1.统计一个无符号整数的二进制表示中1的个数,函数原型是int countbit(unsigned int x);。

2.用位操作实现无符号整数的乘法运算,函数原型是unsigned int multiply(unsigned int x, unsigned int y);。例如:(11011)2 ×(10010)2=((11011)2<<1)+((11011)2<<4)。

3.对一个32位无符号整数做循环右移,函数原型是unsigned int rotate_right(unsigned int x, int n);。所谓循环右移就是把低位移出去的部分再补到高位上去,例如rotate_right(0xdeadbeef, 8)的结果应该是0xefdeadbe。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇15.1.2 移位运算 下一篇Linux C程序设计大全 前言

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: