如何删除最左边的位?
我有一个十六进制值BF
其二进制表示为1011 1111
如何删除第一位1
,然后它将变为0111 1110
?
如何在最后一部分添加“0”?
答案 0 :(得分:6)
x
的位N设置为0
x &= ~(1 << N);
工作原理:表达式1&lt;&lt; N是一位shifted N times to the left。对于N = 7,这将是
1000 0000
bitwise NOT operator ~
将此内容反转为
0111 1111
然后结果为bitwise ANDed x
,给出:
xxxx xxxx
0111 1111
--------- [AND]
0xxx xxxx
结果:第7位(从LSB开始从零开始计数)被关闭,所有其他数据保留其先前的值。
x
的位N设置为1
x |= 1 << N;
工作原理:这次我们将移位位和bitwise OR移到x
,给出:
xxxx xxxx
1000 0000
--------- [OR]
1xxx xxxx
结果:位7已打开,其他所有位置都保留其先前的值。
1
的最高位:如果您不知道哪个是设置为1的最高位,您可以随时查看。有很多方法可以做到这一点;合理的方法是
int x = 0xbf;
int highestSetBit = -1; // assume that to begin with, x is all zeroes
while (x != 0) {
++highestSetBit;
x >>= 1;
}
在循环结束时,highestSetBit
将按预期为7。
<强> See it in action 强>
答案 1 :(得分:4)
int i=0xbf;
int j=(i<<1) & 0xff;
答案 2 :(得分:1)
或者你可以这样做: (i * 2)&amp;&amp;为0xFF 如果你不想做点蠢事。 &gt;&gt; 1相当于/ 2,&lt;&lt; 1相当于* 2.