С некоторой побитовой магией:
int negative = (input >> ((sizeof(int) * 8) - 1)) & 0x01;
Чтобы объяснить это:
В C отрицательные числа являются дополнением до двух, где старший бит обозначает знак.Сначала мы определяем, сколько бит int
имеет на текущей платформе, используя sizeof(int) * 8
.Чтобы получить старший бит с помощью правого сдвига, нам нужно сдвинуть на size - 1
.Поскольку правый сдвиг арифметический в C (то есть, если старший бит равен 1
, мы заполняем int с помощью 1
s слева), нам нужно убить все лишние биты, используя логические и с 0x01
(илипросто 1
, что вы предпочитаете).
В результате получается int
со значением 1
, если входной сигнал отрицательный, или 0
, если он положительный.
ЕслиВы хотите сделать это на бумаге, взять старший байт (в вашем случае DE
), записать верхнюю половину (D
) и проверить, является ли старший бит ноль или единицу.