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

C# 如何删除最左边的位并在其最右边的位中添加位,c#,binary,hex,byte,C#,Binary,Hex,Byte,如何删除最左边的位 我有一个十六进制的值 它的二进制表示是1011111 如何删除第一位,即1,然后它将变为011110 如何将0也添加到其最后部分?将变量x的位N设置为0 int i=0xbf; int j=(i<<1) & 0xff; 将此反转为 0111 1111 然后结果是x,给出: 结果:从LSB开始的第7位零基计数关闭,所有其他值保留其以前的值 将变量x的位N设置为1 结果:位7打开,所有其他值保留其以前的值 正在查找设置为1的最高阶位: 如果您不知道设置为1

如何删除最左边的位

我有一个十六进制的值

它的二进制表示是1011111

如何删除第一位,即1,然后它将变为011110

如何将0也添加到其最后部分?

将变量x的位N设置为0
int i=0xbf;
int j=(i<<1) & 0xff;
将此反转为

0111 1111
然后结果是x,给出:

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

将变量x的位N设置为1 结果:位7打开,所有其他值保留其以前的值

正在查找设置为1的最高阶位: 如果您不知道设置为1的最高位是哪一位,您可以动态查找。有很多方法可以做到这一点;一个合理的方法是

int x = 0xbf;
int highestSetBit = -1; // assume that to begin with, x is all zeroes
while (x != 0) {
    ++highestSetBit;
    x >>= 1;
}
在循环结束时,最高值将如预期的那样为7

.

或者您可以: i*2&&0xff
如果你不想做一些无聊的事情。>>1相当于/2,您尝试编写了哪些代码来实现这一点?哪里出错了?我想用C语言试试,我不知道怎么编码。。我想我应该使用>>但是我不知道这个操作符是如何工作的..使用操作符&?因为在感谢尤金·里克之后我已经得到了我想要的结果。。很好的解释0xff的用途是什么?
0111 1111
xxxx xxxx
0111 1111
--------- [AND]
0xxx xxxx
x |= 1 << N;
xxxx xxxx
1000 0000
--------- [OR]
1xxx xxxx
int x = 0xbf;
int highestSetBit = -1; // assume that to begin with, x is all zeroes
while (x != 0) {
    ++highestSetBit;
    x >>= 1;
}