C 使用整数表达式中使用和操作员
C++ using AND operator in integer expression
我正在读一些用于设计octree的源代码,并在代码中找到了这一点。我删除了一些元素以简化,但是谁能解释i&4
应该评估的内容?
for (int i = 0; i < 8; i++)
{
float j = i&4 ? .5f : -.5f;
}
&
是 bitwise AND Operator
。
它只是在i AND 0x4
中存储的值的位操作。
它完全仅将第三位隔离为2^2 = 4。
您在循环中的表达式检查是否在i中设置了第三位,并分配给J(必须是float!)0.5或如果未设置-0.5
我不确定,但是它可以评估i和4(100)的位和操作,因此在第三位中具有'1'的任何数字都将被评估为true,否则错误。
ex:5(101)&amp;4(100)= 100(4),与0不同,因此8(1000)&amp;4(100)= 0000(0)是false
在这种情况下,&
操作员是一个位和。由于第二操作数为4,功率为2,因此当i
具有其第二个最不重要的位时,它评估为4,否则为0。
for
循环从0到7的i
占用。考虑在此范围内i
的位表示:
0000 - 0
0001 - 1
0010 - 2
0011 - 3
0100 - 4
0101 - 5
0110 - 6
0111 - 7
^
|
This bit determines the result of i & 4
因此,条件的最终结果如下:如果设置了第二位(即,当i
为4、5、6或7),则结果为0.5f
;否则,是-0.5f
。
对于给定的值范围,可以将此表达式重写为
float j = (i >= 4) ? .5f : -.5f;
i & 4
设置了值时,只需评估为true即可。在您的情况下,这仅发生在循环的后半部分。因此,代码实际上可以重写:
for (int i = 0; i < 4; i++)
{
float j = -.5f;
}
for (int i = 4; i < 8; i++)
{
float j = .5f;
}
相关文章:
- 如何反转整数参数包
- enum是C++中的宏变量还是整数变量
- 努力将整数转换为链表。不知道我在这里做错了什么
- 整数不会重复超过随机数
- 在C++中手动调整数组大小
- 检查输入是否不是整数或数字
- C++使用整数的压缩数组初始化对象
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 如何只允许用户输入正整数
- 如何在c++中从文本文件中逐行读取整数
- C++:如何循环通过向量中的整数元素
- 我可以信任表示整数的浮点或双精度来保持精度吗
- 序列化,没有库的整数,得到奇怪的结果
- 在一定长度后从数组中打印时缺少整数
- std::当在256字节边界上写入整数时,流的奇怪行为
- 操作员与整数模板参数专业化过载
- **签名的**正整数会导致溢出的一单位减去操作员
- C 使用整数表达式中使用和操作员