我有一个负二进制数,它有一个符号位,想编写一个程序来获取它的格雷码。但是,我只能找到正数的解决方案。所以我在这里问这个问题。谢谢。
问问题
1468 次
2 回答
0
格雷码只能计算非负数,使用以下方法:
int gray_encode(int n) {
return n ^ (n >> 1);
}
由于二进制数的二进制补码表示,相同的方法不适用于负数。
于 2014-11-22T13:05:50.533 回答
0
如果目标位宽已知,则可以将有符号整数转换为格雷码:
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 0100
于 2021-06-22T14:10:41.883 回答