从 0 到 255 的单个字节从 0 到 7 重新缩放

问题描述 投票:0回答:1

单个 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)
go bit-manipulation bit bitwise-operators integer-arithmetic
1个回答
0
投票

使用按位

AND
:

bit3 := bit8 & 7

没有什么比这更快了🚀

© www.soinside.com 2019 - 2024. All rights reserved.