右移unsigned char后,如何通过位操作将最高位设为1?
位操作实现01000000转11000000
你需要将01000000(十进制64)修改为11000000(十进制192),核心是把最高位(第7位,从0开始计数)置为1,同时保留其他位的原有值,用**位或运算符(|)**就能轻松实现:
方法1:直接用数值掩码
unsigned char myBits = 128; // 10000000 in binary myBits = myBits >> 1; // 右移后为64,二进制01000000 myBits = myBits | 128; // 位或128(二进制10000000),结果为192(11000000)
方法2:用十六进制掩码(可读性更强)
十六进制0x80对应二进制10000000,和上面的128等价:
myBits = myBits | 0x80;
方法3:用移位生成掩码(更直观)
通过1 << 7生成最高位为1的掩码,不用硬记具体数值:
myBits = myBits | (1 << 7);
原理:位或操作的规则是「只要对应位有一个1,结果位就是1」,所以用最高位为1、其他位为0的掩码和原数值进行或操作,只会把原数值的最高位设为1,其他位保持不变。
内容的提问来源于stack exchange,提问作者nalabof679
相关产品推荐
相关产品推荐

