使用 int 的位表示进行操作
Manipulating with bit representation of int
我有一些 int
和 short
这样的:
int a = //...
short b = //..
使用以下位表示法制作 int c
的最快方法是什么:
a
的第 2 和第 3 个最高有效字节由 b
的字节表示组成。
a
的其余字节保持不变。
也许按位 OR
会在这里有所帮助,但仍然不知道如何。
例如:
a = 01010101 01010101 01010101 01010101
b = 11111111 11111111
然后我们有
c = 01010101 11111111 11111111 01010101
删除那些字节中原来的内容,然后放入 b
:
c = (a & 0xFF0000FF) | ((b << 8) & 0x00FFFF00);
移位后的额外 &
是为了抵消符号扩展,否则只要 b
为负,符号扩展就会用 1 覆盖最高字节。
我有一些 int
和 short
这样的:
int a = //...
short b = //..
使用以下位表示法制作 int c
的最快方法是什么:
a
的第 2 和第 3 个最高有效字节由b
的字节表示组成。a
的其余字节保持不变。
也许按位 OR
会在这里有所帮助,但仍然不知道如何。
例如:
a = 01010101 01010101 01010101 01010101
b = 11111111 11111111
然后我们有
c = 01010101 11111111 11111111 01010101
删除那些字节中原来的内容,然后放入 b
:
c = (a & 0xFF0000FF) | ((b << 8) & 0x00FFFF00);
移位后的额外 &
是为了抵消符号扩展,否则只要 b
为负,符号扩展就会用 1 覆盖最高字节。