C/C++位操做

写在前面

^异或:不一样为1,相同为0。能够记为:“异”为不一样,不一样为1.html

signed char 符号位是1时右 移位在左边补1。如: signed char value=–104;
其二进制表示为10011000。使用下面的操做把它向右移动两位: value >>= 2; //Result 11100110测试

//计算绝对值:
int abs(int x)
{
    int y;
    y = x >> 31; //y必定要是int型,右移结果为0xffffffff或0,若为unsigned 则右移结果为1或0
    return (x^y)-y; //or:(x+y)^y
}

# 传统的C方式位操做 1.基本操做: 使用一个unsigned int变量来做为位容器。ui

2.位操做符: |:按位或操做,result = exp1 | exp2;当exp1和exp2中对应位中有一个为1时,则result中对应位为1,不然为0. 应用特色:与0位“或”相应的位不变,与1位“或”设置相应的位为1. 所以用于:设置某一位为1,而保证其它的位不变。好比:result |= (1<<12)将设置result的第12位为1. 也经常使用于:给某个位属性值附加上另外一个属性值,好比:result |= exp;这里至关于给result附加上exp的属性。.net

&:按位与操做,result = exp1 & exp2;当exp1和exp2中对应的位都为1时,result中对应的位才为1. 应用特色:与0位“与”相应的位为0,与1位“与”相应的位不变。0与1“与”结果为0,1与1“与”结果为1,因此也就是说bit & 1 = bit,与1进行“与”操做不改变自己。 所以用于:设置某一位为0,而保证其它的位不变。好比:result &= ~(1<<12)将设置result的第12为0. 也经常使用于:得到某个属性的某一位或某几位。好比:result & 3 将得到result的最低的两位。再好比截取一个32位数字的低8位等等。 也经常使用于:测试某个属性是否等于或包含特定的值。好比:if(result & exp)...unix

^:按位异或操做符,result = exp1 ^ exp1;当exp1和exp2中对应位的值不相同时,result对应的位为1 应用特色:1)0与1“异或”结果位1,1与1“异或”结果位0,也就是说bit ^ 1 = ~bit,与1“异或”至关于将特定的位取反。 2)1与0“异或”结果位1,0与0“异或”结果位0,也就是说bit ^ 0 = bit,与0“异或”将保持特定的位不变。 所以用于:将某一特定位取反,而保证其它的位不变。好比:result ^= (1<<12)将result的第12位取反。 也经常使用于:将本身清0,好比:result ^= reslut;将使result因此位都变成0.code

~:反转操做符,将位容器中的因此位都反转,将1变成0,0变成1。htm

<<:按位左移操做符,exp << n;将容器中的全部位向左移n位,空出的位用0填补。blog

:按位右移操做符,exp >> n;将容器中的全部位向右移n位,空出的位用0填补。get

3.C方式位操做总结: 设置特定的位用|; 清除特定的位用&; 取反特定的位用^; 取反全部的位用~;it

引用自

相关文章
相关标签/搜索