这个浮动公式是什么意思
What does this float formula mean?
好的,我得到了一个公式,使用I和j (2D数组中值的坐标)确定0.0和1.0之间的浮点值。我只是想知道这个公式到底是做什么的。这对我来说毫无意义。我已经在它自己的函数中实现了它,其中I和j的int值作为参数传递。有人能解释一下吗?我不必理解它,因为他给我们的只是原样使用,但我真的很想知道。
float col = float (((i & 0x08) == 0) ^ ((j & 0x08) == 0));
这到底是怎么回事?
结果,如果用i,j
作为x,y坐标,将是一个正方形为8x8像素的棋盘。
i & 0x08
和j & 0x08
只是测试每个轴的单个比特。该位每8个像素改变一次状态。
== 0
将每个结果转换为布尔值,其计算值为0或1。它也反转了结果,但我认为这与整个公式无关。
^
的异或运算符将返回0,如果两者相同,则返回1。这就是你得到棋盘的方式——每次i
或j
越过边界时,结果都会发生变化。
这里有很多布尔运算符和位布尔运算符。让我试着部分地回答。让我们先分成几部分
A:(i & 0x08)
按位和对i执行-基本上是对i和0x08(二进制为1000)的每个位执行和
B:A==0
检查每一位是否按位和为假基本上检查倒数第4位是否为0
C: B ^ B'
按位异或-如果其中一个为真,而不是两个都为真,则返回1(按位)
D:float(C)
简单一种,把C投到浮上。
最终结果- No idea.
float col = float (((i & 0x08) == 0) ^ ((j & 0x08) == 0));
& 0x08
按位和带8,这意味着它从数字i
和j
中提取第四个最低有效位(1是最低的,然后是2,4,8)。^
是一个异或操作:如果两位相同,结果为0,如果不相同,结果为1。它被外部的= float(...)
提升为float
,因此如果i
和j
相同,则col
变为0.0
,如果它们不同,则变为1.0
。
为什么它可能有用?这取决于i
和j
是什么。据推测,第4位编码一些特定的条件或标志(一个布尔值),例如:一个人是男性还是女性。&
操作提取,然后^
说"它们不同吗?"为什么要将布尔表达式转换为浮点数?老实说,没有太多好的理由——你总是可以让转换在使用它的地方隐式地完成,比如在(假设是男性/女性):
bool hetero = i & 0x08 ^ j & 0x08;
float estimated_children_from_coupling = 1.3 * hetero; // same as hetero ? 1.3 : 0;
简而言之,如果"i"或"j"等于0x08(十进制8),则"col = 1.0"
(我和0x08):如果"i == 0x08"不为零,否则为零(我,0x08) == 0: 1/true if "i != 0x08", 0/false if "i == 0x08"j"
也一样因此,两边的"异或"(^运算符)将为真,其中一方为真,但不同时为真,这种情况发生在i或j为0x08时。
最后,不管什么原因,它将结果强制转换为float
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 线应该是什么意思
- "CID"在AT+HTTPPARA= "CID" ,1中是什么意思
- 表达式"b=(b-x)&x"是什么意思?
- 这个表达是什么意思?
- 此代码验证公式是什么意思?
- 跟踪日志中的T.11803()是什么意思?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- * 和 ** 在 C++ 函数声明中是什么意思?
- _T("xyz")是什么意思?
- #define Dbg(fmt,..) (0) 是什么意思? 警告:表达式无效
- 这行代码到底是什么意思?
- 在命名空间名称之前加上 :: 是什么意思?
- 从字符数组的元素中减去'a'是什么意思
- "friend"关键字在C++中是什么意思?
- 减法中的"0"是什么意思?
- 字符数组前面的加号是什么意思?
- 这里的字符串函数是什么意思