C语言位操作技巧

一基本位操作符

& 位与       | 位或          ~ 位反        ^ 位异或     <<左移          >> 右移

(1)&: 参加运算的两个数据,按位进行与运算。如果两个相应的位都为1,则该位为1,否则为0

&用途:用屏蔽字“与”变量可以取出变量的某些位:

例如 a 00101100 10101100

         b 00000000 11111111这里b被称为“位掩码”,作用如同筛子。注意:位掩码应与所操作的值相同长度

例:16位机上,使某个数最低一位为0,其他位不变。int i=11; i = i & 0xFFFE;  这样的源程序就失去了可移植性。(例如:从16位机移植到32位机) 较好的写法:i = i & ~1;

(2)| : 参加运算的两个数据,按位进行或运算。如果两个相应的位至少有一个为1,则该位为1,否则为0。

| 用途:可以设置变量的某些位为1:

(3)~ 用来对一个二进制数按位取反。即将0变1,1变0。

(4)^ : 若两个相应的位同号,则该位为0,不同则为1。

^ 位异或用途:可以使变量某个特定的位翻转,与0相^保留原值,与1^取反,与自身^结果为0。

(5)左位移运算符(<<)

无符号数左移一位相当于该数乘以2。<<移位时,移出的高位全部丢弃,低位全补0。

(6)右位移运算符(>>)

无符号数右移一位相当于该数除以2。>>移位时,移出的位数全部丢弃。

对于无符号数,则高位补0;

对于有符号数,则符号位补0还是1,不确定。


二 基本位操作符—使用归纳

(1) 判断int型变量a是奇数还是偶数

a&1 如果等于0 偶数 如果=1奇数

(2) 取int型变量a的第k位(k=0,1,2……31)   a>>k&1

(3) 将int型变量a的第k位清0   a=a&~(1<<k)

(4)将int型变量a的第k位置1   a=a|(1<<k)

(5) int型变量a循环左移k次 a=a<<k|a>>32-k  (设sizeof(int)=4)

(6) int型变量a循环右移k次 a=a>>k|a<<32-k  (设sizeof(int)=4)

(7)交换变量的值 a = a^b;  b = a^b;  a = a^b;


C的哲学就是简单,C认为程序员应该勇敢的承担责任

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值