使用for循环检查字节中的位
本文关键字:字节 检查 for 循环 使用 | 更新日期: 2023-09-27 18:20:48
我最近在学习C#,在那里我遇到了以下循环
// Display the bits within a byte.
using System;
class ShowBits {
static void Main() {
int t;
byte val;
val = 123;
for(t=128; t > 0; t = t/2) {
if((val & t) != 0)
Console.Write("1 ");
if((val & t) == 0)
Console.Write("0 ");
}
}
}
我无法理解为什么在for循环的递增/递减部分中执行t=t/2。plz解释
Decimal 128是二进制的10000000,即仅用于字节的最高有效位的掩码。当你把它除以2时,你得到01000000,即第二个最高有效位,等等。
在原始值和掩码之间使用&
并仅与0进行比较指示该位是否设置在原始值中。
另一种选择是改变原始值:
for (int i = 7; i >= 0; i--)
{
int shifted = val >> i;
// Take the bottom-most bit of the shifted value
Console.Write("{0} ", shifted & 1);
}
它以2的幂递减循环,并在掩码中使用该值。
(基本10):128、64、32、16、8、4、2、1
(基数2):1000000001000000、00100000、00010000、00001000、00000100、00000010、0000000 1
128在二进制中被写为10000000
,所以我们检查字节中的最高位是否打开。然后我们做t=t/2,这是t=128/2=64
,在二进制中写入01000000
,依此类推。任何除法都会将位于一个位置的一位向右移动。
t用作val
中位的掩码
所以它从二进制的12810000000开始
当它除以2时,它变为64或01000000。
一直持续到0。
然后在每次迭代中用于用CCD_ 7中的当前比特来屏蔽CCD_。