有两个不同但相关大小的向量。 (2 * RESOLUTION) + INDEX_OFFSET
(例如2050)越大,RESOLUTION
越小(例如1024)。我认为可以安全地假设uint16_t
可用于包含向量索引。
通过将resultIndex
递增2来执行对较大向量的迭代。在每次迭代期间,对索引(resultIndex - INDEX_OFFSET) / 2
处的较小向量进行赋值。
本质上,代码依赖于以下假设:无论INDEX_OFFSET
是奇数还是偶数,上述除以2将始终向下舍入,无论架构如何。例如,如果resultIndex
为0或1,则预期为0,如果是2或3则预期为1,依此类推。在上述参数范围内,这是一个安全的假设吗?
N.B。我承认存在'Dividing integer types - Are results predictable?'但它似乎并不完全匹配。
答案 0 :(得分:15)
是;这是由语言保证的:
[C++11: 5.6/4]:
二进制/
运算符产生商,二进制%
运算符从第一个表达式除以第二个表达式得到余数。如果/
或%
的第二个操作数为零,则行为未定义。 对于积分操作数,/
运算符产生代数商,丢弃任何小数部分; 如果商a/b
在结果类型中可表示,(a/b)*b + a%b
为等于a
。
在3/2
中,3
和2
都是整数操作数;此操作的代数商为1.5
,当您丢弃小数部分.5
时,您得到1
。这适用于您的其他示例以及所有其他示例。