如何删除最左边的位并在其最右边的位添加位

时间:2012-05-13 12:45:30

标签: c# binary hex byte

如何删除最左边的位?

我有一个十六进制值BF

其二进制表示为1011 1111

如何删除第一位1,然后它将变为0111 1110

如何在最后一部分添加“0”?

3 个答案:

答案 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.