4

我有一个负二进制数,它有一个符号位,想编写一个程序来获取它的格雷码。但是,我只能找到正数的解决方案。所以我在这里问这个问题。谢谢。

4

2 回答 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 回答