如何将负二进制数转换为格雷码

时间:2014-11-21 01:06:04

标签: binary converter bit-manipulation gray-code

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

2 个答案:

答案 0 :(得分:0)

格雷码只能使用以下方法计算非负数:

int gray_encode(int n) {
    return n ^ (n >> 1);
}

由于二进制数的二进制补码表示,同样的方法不能用于负数。

答案 1 :(得分:0)

如果目标位宽已知,可以将有符号整数转换为格雷码:

RET

例如,这是值从 -7 到 7 的 4 位格雷码:

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);
}