我有一个负二进制数,它有一个符号位,我想写一个程序来得到它的格雷码。然而,我只能找到正数的解决方案。所以我在这里问这个问题。谢谢。
发布于 2014-11-22 21:05:51
只能计算非负数的格雷码,方法如下:
int gray_encode(int n) {
return n ^ (n >> 1);
}同样的方法不适用于负数,因为二进制数的补码表示。
发布于 2021-06-22 22:10:42
如果目标位宽已知,则可以将带符号整数转换为格雷码:
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);
}例如,这是从-7到7的值的4位格雷码:
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 0100https://stackoverflow.com/questions/27052532
复制相似问题