Оператор «Больше, чем» в логической логике (логические элементы)

StackOverflow https://stackoverflow.com/questions/2344025

  •  23-09-2019
  •  | 
  •  

Вопрос

По сути, у меня есть два 8-битных двоичных числа без знака, и мне нужно использовать логическую логику, чтобы определить, какое из них больше, и я не могу хоть убей понять, с чего начать.Использование логических вентилей...

Очевидно, мне придется проанализировать каждый бит и выяснить, какой из них больше, но как мне собрать все это воедино?

Скажем, у меня есть x и y, и я хочу вернуть true, если x < y (x и y — 8-битные беззнаковые двоичные числа).Как бы я это сделал?

Я думал о том, какой бит имеет самый старший, но что, если они оба одинаковы?

У кого-нибудь есть идеи?

Это было полезно?

Решение

Я думал о том, какой бит имеет самый старший, но что, если они оба одинаковы?

Вы переходите от «самого значимого бита» к «наименее значимому биту», пока не появится разница.Число, в котором первый бит установлен в «1», является наибольшим.

Чтобы реализовать это, используйте «регистр сдвига» для каждого числа и компаратор для битов, «выходящих» из SR.

Другие советы

Вы уже на полпути.Да, начните с самого важного.Если они оба одинаковы, перейдите к следующему биту (перемещаясь вправо, к наименее значимому биту).Когда вы обнаружите, что бит установлен (а другой нет), это большее число.

Действительно, вы на правильном пути.Сначала сравните самый старший бит.Если они не равны, вы уже можете вывести результат, так или иначе.Если они равны, то вы просто выводите результат сравнения второй самый значимый бит.И так до наименее значимого бита.Рекурсия в каком-то смысле.В результате у вас будет одна и та же конфигурация элементов, повторяющаяся для каждого бита, за исключением последнего, который будет иметь небольшое изменение (поскольку после него нет другого бита).

Если старший бит единицы «больше» (т.е.:это 1, а другой 0), тогда чем число больше.

Если они одинаковы, выполните тот же тест для следующего бита.

Итак, вам нужно что-то вроде этого C-подобного псевдокода (притворяясь, что у нас есть биты в массивах, старший из которых находится в позиции 0):

// true iff x > y
(x[0] == 1 && y[0] == 0) 
|| (
  (y[0] == x[0]) 
  && (the entire expression all over again, but with [n+1] instead of [n])
)

Для вашего базового случая (т.е.:когда больше нет битов для проверки), используйте false или true в зависимости от того, хотите ли вы > или >=.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top