【发布时间】:2020-03-31 14:15:53
【问题描述】:
我想对一个 32 的变量做 33 的右移并将结果存储到一个浮点变量中。
假设该值为 1717986812。当我们右移 33 时,我们期望该值为 0.2。
但是当我执行 1717986812 / (1
【问题讨论】:
-
将 32 位整数移位超过 32 位的结果未定义。
-
假设是 1717986812。当我们右移 33 位时,我们期望值是 0.2。 你的依据是什么?将
signed int值1717986812右移任意位置是int,其值不能为0.2,即使假设它的宽度足以移动33 个位置。 -
确认你确实想除以 2^33
-
C11 §6.5.7 Bitwise shift operators ¶3: 对每个操作数执行整数提升。结果的类型是提升的左操作数的类型。如果右操作数的值为负数或大于或等于提升的左操作数的宽度,则行为未定义。。将 32 位整数右移 32 位或更多位是未定义的行为 - 结果是不可预测的(并且不会自动为零)。
标签: c 64-bit bit-shift 32-bit fixed-point