我正试图摆脱我的功能中的花车.
我有一个函数操作16位整数值,这是一个升级的8位值.然后将缩减的8位发送到输出.
我相信我不会很好地解释它.像这样的东西:
int8 spot_value = 21; //arbitrary. just need a starting point
int16 running_value;
running_value = spot_value << 8; //multiply by 256 which is 5376
running_value += 154; //my upscaled value is now 5530
spot_value = running_value >> 8; //downscale again
Run Code Online (Sandbox Code Playgroud)
如果我们使用浮点数,我的缩减值将是21.6,我可以轻松地将其舍入为22并转换为int8.但是它会截断到21,这是我不想要的.
有没有办法"整理"整数,如果它是合适的,如果它是一个浮点数但没有将任何东西转换为浮点数(甚至是暂时的)?
这可能比我做到的要简单得多.
您可以为该值添加1/2.在你的缩放系统中,它是128.
int8 spot_value = 21; //arbitrary. just need a starting point
int16 running_value;
running_value = spot_value << 8; //multiply by 256 which is 5376
running_value += 154; //my upscaled value is now 5530
spot_value = running_value + 128; //add an additional 1/2 for rounding
spot_value = spot_value >> 8; //downscale again
Run Code Online (Sandbox Code Playgroud)
要么...
scale_shift = 8;
scale = 1 << scale_shift
round = scale >> 1;
int8 spot_value = 21; //arbitrary. just need a starting point
int16 running_value;
running_value = spot_value << scale_shift; //multiply by 256 which is 5376
running_value += 154; //my upscaled value is now 5530
spot_value = (running_value + round) >> scale_shift; //downscale again
Run Code Online (Sandbox Code Playgroud)
或根据戴维的答案有点诡计......
running_value = spot_value << scale_shift; //multiply by 256 which is 5376
running_value += 154; //my upscaled value is now 5530
spot_value = (running_value >> 8) + ((running_value >> 7) & 1)
Run Code Online (Sandbox Code Playgroud)
.
| 归档时间: |
|
| 查看次数: |
355 次 |
| 最近记录: |