我有一个带有符号位的负二进制数,想编写程序获取它的格雷码。然而,我只能找到正数的解决方案。所以我在这里提出了这个问题。 谢谢。
我有一个带有符号位的负二进制数,想编写程序获取它的格雷码。然而,我只能找到正数的解决方案。所以我在这里提出了这个问题。 谢谢。
格雷码只能用以下方法计算非负数:
int gray_encode(int n) {
return n ^ (n >> 1);
}
同样的方法对于负数不起作用,因为二进制数的补码表示。
如果目标位宽已知,则可以将有符号整数转换为格雷码:
int gray_encode(int n) {
return n ^ (n >> 1);
}
int gray_encode_signed(int n, int width_bits) {
int all_ones = (1 << width_bits) - 1;
return (n >= 0 ? gray_encode(n) : gray_encode(abs(n)) + all_ones);
}
decimal 4bit gray code
-7 1011
-6 1100
-5 1110
-4 1101
-3 1001
-2 1010
-1 1000
0 0000
1 0001
2 0011
3 0010
4 0110
5 0111
6 0101
7 0100