【发布时间】:2010-07-17 04:54:31
【问题描述】:
假设我有一个 int 变量 n = 8。在大多数机器上,这将是一个 32 位值。我怎样才能只得到二进制的低 8 位(最低字节)?另外我如何访问每个位以找出它是什么?
【问题讨论】:
标签: c
假设我有一个 int 变量 n = 8。在大多数机器上,这将是一个 32 位值。我怎样才能只得到二进制的低 8 位(最低字节)?另外我如何访问每个位以找出它是什么?
【问题讨论】:
标签: c
unsigned n = 8;
unsigned low8bits = n & 0xFF;
注意几点:
unsigned 类型& 运算符的二进制掩码从数字中提取位0xFF,因为在二进制中它的低 8 位打开,其余为 0要访问数字的某个位,请说kth 位:
unsigned n = ...;
unsigned kthbit = (1 << k) & n;
现在,如果n 的第k 位为0,则kthbit 将为0,如果n 的第k 位为1,则为某个正数(2**k)。
【讨论】:
使用按位运算来屏蔽最低 8 位:
unsigned char c = (x & 0xFF);
要访问第 n 个最低位,等式是 (x & (1 << n))(零的 n 表示最低有效位)。结果为零表示该位清零,非零表示该位已设置。
【讨论】:
最好的方法是使用具有适当值的位逻辑运算符 &。
所以对于低 8 位:
n & 0xFF; /* 0xFF == all the lower 8 bits set */
或者作为一般规则:
n & ((1<<8)-1) /* generate 0x100 then subtract 1, thus 0xFF */
您可以结合位移运算符来获得特定的位:
(n & (1<<3))>>3;
/* will give the value of the 3rd bit - note the >>3 is just to make the value either 0, or 1, not 0 or non-0 */
【讨论】:
您可以使用
if (num & (1<<3)) ...
将测试第四位是否设置。
同样,您可以使用 & 和一个仅设置了最低 8 位的数字(即 num & 255 或 num & 0xFF(十六进制))来提取最低 8 位(作为整数)。
【讨论】: