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