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

mon*_*ffy -1 c# binary hex byte

如何删除最左边的位?

我有一个十六进制值 BF

它的二进制表示是 1011 1111

我怎样才能删除第一位,1然后它会变成0111 1110

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

Eug*_*eck 6

int i=0xbf;
int j=(i<<1) & 0xff;
Run Code Online (Sandbox Code Playgroud)


Jon*_*Jon 6

将变量的位N设置x0

x &= ~(1 << N);
Run Code Online (Sandbox Code Playgroud)

工作原理:表达式1 << N 向左移一位N次.对于N = 7,这将是

1000 0000
Run Code Online (Sandbox Code Playgroud)

位NOT 操作~反转这

0111 1111
Run Code Online (Sandbox Code Playgroud)

那么结果是按位与运算x,赠送:

xxxx xxxx
0111 1111
--------- [AND]
0xxx xxxx
Run Code Online (Sandbox Code Playgroud)

结果:第7位(从LSB开始从零开始计数)关闭,所有其他保留其先前的值.

将变量的位N设置x1

x |= 1 << N;
Run Code Online (Sandbox Code Playgroud)

它是如何工作的:这次我们采用移位的位和按位或x,给出:

xxxx xxxx
1000 0000
--------- [OR]
1xxx xxxx
Run Code Online (Sandbox Code Playgroud)

结果:位7打开,所有其他保留其先前的值.

查找最高位设置为1:

如果您不知道哪个是设置为1的最高位,您可以随时查找.有很多方法可以做到这一点; 一个合理的方法是

int x = 0xbf;
int highestSetBit = -1; // assume that to begin with, x is all zeroes
while (x != 0) {
    ++highestSetBit;
    x >>= 1;
}
Run Code Online (Sandbox Code Playgroud)

在循环结束时,highestSetBit将按预期为7.

看到它在行动.