本文共 734 字,大约阅读时间需要 2 分钟。
#includeusing namespace std;int main() { /* 按位与运算 & 把某些位变成0 其余位不变 */ //把int类型低8位置0,其余不变 int n = 231; n &= 0xffffff00; printf("%d\n",n); //short类型的低8位置零 n &= 0xff00; //求int变量第7位是1 or 0 int a = 127; a &= 0x80;//与完判断第8位 是否是 0 (从1开始数) printf("%d",a == 0x80); /* 按位或 | 把某些位变成1 其余位不变 */ // 低8位变成1 ,高位不变 c |= 0xff; /* 按位异或 ^ 某些位取反 其他位不变 */ //低8位取反,其他位不变 n ^= 0xff; /* 按位非 ~ */ ~n; /* 左移 << 右移 >> 左右移动不改变原变量 左移末尾补0 右移:有符号数,补上原符号位 无符号补 0 */ return 0; }
/* 有两个int 变量 a 和n(0 <= n < 31) 写出一个表达式,使该表达式的值和a的第n位相同 */ int res; a = 10; res = (a >> n) & 1; //二进制从0位开始计数 //或者 res = ((1 << n)&a) >> n;//这种 n != 31 因为 此时 最后与的是符号位 再右移会补上符号位可能产生错误
转载地址:http://pgimi.baihongyu.com/