单个 1 字节可以从
0
到 255
。我打算将其从 0
重新调整为 7
。我已经这样做了:
bit8 := uint8(136)
// To re-scale 1 byte from 0 to 2^3-1 i.e. 0 to 7
bit3 := bit8 / 0xff * 0b0111
得到的
bit3
是 0
,但我预计它是 3
或 4
,具体取决于向下或向上舍入。由于浮点精确值将是 136/255*7 = 3.733333333
。
如何才能达到我想要的输出?此时向上和向下舍入并不重要。只要方便就好。
我希望操作尽可能高效。因为它将在循环内完成。因此,像下面这样的解决方案不是最佳:
bit8 := uint8(136)
// To re-scale 1 byte from 0 to 2^3-1 i.e. 0 to 7
bit3 := uint8(float64(bit8) / 255.0 * 7.0)
使用按位
AND
:
bit3 := bit8 & 7
没有什么比这更快了🚀