gpt4 book ai didi

java - 将数字分成两部分

转载 作者:行者123 更新时间:2023-12-01 22:49:38 25 4
gpt4 key购买 nike

我正在尝试将数字(8位)(0..255)分成两个数字,如下所示:100(二进制 01100100)转换为 6(0110) 和 4(0100)。

在C中我这样做:

short row = value >> 4; //value - uint8_t
short col = (row << 4) ^ value;

在 Java 中我用另一种方式来做(因为类似 C 的代码不能正常工作):

short v1 = (byte)(value >> 4);
short v2 = (byte)((byte)(value << 4) >>> 4);

它适用于 0 到 103 之间的数字。但对于大于 103 的数字则不起作用。

附:其实问题就在这里:

short v2 = (byte)((byte)(value) >>> 4);
=>104 (1101000). I expected to see something like this: 00001000, but result is 11111000
=>103 (1100111). Result is 111;

修复。

我是这样修复的:

short value = (byte)255;
short v1 = 0;
short v2 = 0;

for(int i = 3; i >= 0; i--) {
v2 = (short) (v2 << 1 | ((value >> i) & 1));
v1 = (short) (v1 << 1 | (value >> (i + 4) & 1));
}
System.out.println(v1 + " " + v2);

但我更喜欢C方式,它更简单。

最佳答案

short row = (value >> 4) & 0x0F;
short col = value & 0x0F;

这也应该适用于 C 语言。

& 仅保留同一位置为 1 的位:

11111000   // 104
00001111 // 0x0F == 15
--------
00001000 // 104 & 0x0F == 8
// because only the fourth bit from right is 1 in both numbers!

关于java - 将数字分成两部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24908020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com