Как преобразовать отрицательное двоичное число в его серый код
У меня есть отрицательное двоичное число, у которого есть знаковый бит, и я хочу написать программу, чтобы получить ее серый код. Однако я могу найти решение только для положительного числа. Поэтому здесь я задаю этот вопрос. Благодарю.
2 ответа
Код Грея можно рассчитать только для неотрицательных чисел, используя следующий метод:
int gray_encode(int n) {
return n ^ (n >> 1);
}
Тот же метод не будет работать для отрицательных чисел из-за представления двоичных чисел в дополнении Two.
Можно преобразовать целое число со знаком в код Грея, если известна целевая разрядность:
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);
}
Например, это 4-битный код Грея для значений от -7 до 7:
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