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