Chinaunix首页 | 论坛 | 博客
  • 博客访问: 229660
  • 博文数量: 108
  • 博客积分: 3092
  • 博客等级: 中校
  • 技术积分: 1172
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-25 16:35
文章分类

全部博文(108)

文章存档

2011年(3)

2010年(43)

2009年(19)

2008年(43)

我的朋友

分类: C/C++

2008-08-02 19:09:54

位运算

1.       按位异或运算符^的作用

(1)       使特定位反转:与***11**11***异或;

(2)       保留原值:与0异或;

(3)       不使用临时变量,交换两个值:a=a^b; b=b^a; a=a^b;

2.       取反运算符

取反运算符是对二进制数按位取反;

对一个整数a的最后一位取反,考虑程序的移植性(16位,32位):a=a&~1

~运算符的优先级最高;

3.       左移运算符<<

右补0,高位移出后舍弃;

当左移溢出舍弃的高位不包含1时,左移一位《=*2

左移运算比乘法运算要快很多

4.       右移运算符>>

右移时要注意符号位的问题:逻辑右移补0,算术右移补符号位;

 

位运算举例:

1.       取一个整数a从右端开始的4-7

使a右移4位,设置一个低4位为1其余为0的数,两者位与:

(a>>4)&(~(~0<<4))

2.       循环右移n

a的右端n位放到b的高n位中:b=a<<(16-n)

a右移n位,左面高n位补0c=a>>n

c=c|b

 

位段

bit为单位存储信息的机制,是一种结构体,其中的成员称为“位段”或“位域”。

位段成员的类型必须为unsignedint

若某一位段要从另一个字开始存放,可采用以下定义方式:

   Unsigned a:1;

   Unsigned b:2;

   Unsigned  :0;

   Unsigned c:3;   (另一存储单元)

一个位段必须在同一存储单元中,如果第一个单元不能容纳一个位段,则该空间不用,从下一个单元开始存放该位段;

位段在数值表达式中被系统自动转换为整型数使用。

阅读(761) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~