读书人

C++位操作技能

发布时间: 2013-10-18 20:53:13 作者: rapoo

C++位操作技巧

一、注意事项:

a、与:&,两位都为1,才为1;

b、或:|,两位都为0,才为0;

c、微操作只能用于整形数据,float和double进行位操作时编译器会报错;

d、异或:^,两位相同为0,不同为1;

e、取反:~,1变为0,0变为1;

f、左移:<<,各二进制全部向左移位,高位丢失,低位补零;

g、右移:>>,各二进制全部向右移位,对于无符号数,低位丢失,高位补零;有符号数个编译器不同,有的补符号位,有的补0;

二、技巧用途:

1、判断奇偶:

只要判断二进制最末尾是0还是1即可判断,为0则是偶数,为1则为奇数;因此用if(a & 1) == 0代替if(a%2 == 0)来判断a是不是偶数。

输出1到100所有的奇数:

int abs(int a){    int i >> 31;//获取符号位,a为正数i为0,a为负数i为-1    return ((a^i) - i);//如果a为正数,则i=0,a^i的值不变(任何数和0异或都不变),-i后a不变,返回a;如果a为负数,则i=-1(即0xFFFFFFFF),a^i相当于给各位取反,在-i则相当于+1,返回a的相反数;}






读书人网 >C++

热点推荐