我偶然发现了我无法理解的代码的一部分。
for (unsigned int i = (x & 0b1); i < x; i+= 2)
{
// body
}
这里,x是从0到5。
0b1是什么意思?对于例如:(0 & 0b1),(4 & 0b1)等等,答案是什么?
发布于 2022-02-13 22:10:06
0b...
是一个二进制数,就像0x...
是十六进制,0...
是八进制。
因此,0b1
与1
是相同的。
1b0
是非法的,其中的第一个数字必须始终是0
。
发布于 2022-09-13 06:14:02
正如前面的答案所述,它是整数1的二进制表示,但它们似乎没有完全回答您的问题。这有很多层,所以我将简要地解释每一层。
在这种情况下,符号是作为位和运算符工作的。i & 0b1
(有时)是一种检查整数是否与i % 2 == 0
相反的更快的方法。
假设您有int x = 5
,您希望检查它是否使用按位和。
在二进制文件中,5将表示为0101
。最后一个1
实际上代表数字1,在二进制整数中,它只存在于奇数中。让我们把按位和运算符应用于5和1;
0101
0001
&----
0001
运算符正在检查每一列,如果两行都是1
,则结果的该列将是1
-否则,将是0
。因此,结果(转换回base10)是1。现在让我们尝试一个偶数。4= 0100
。
0100
0001
&----
0000
结果现在等于0。这些规则适用于每一个整数,无论其大小。
这里的高级层是C中没有布尔数据类型,所以布尔值被表示为0 (false)或任何其他值(true)的整数。这允许一些棘手的速记,因此条件if(x & 0b1)
只在x
是奇数时才会运行,因为odd & 0b1
总是等于1 (true),而even & 0b1
总是等于0 (false)。
https://stackoverflow.com/questions/71105283
复制相似问题