2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу Пред.  1, 2
 
 Re: Как реализуется сравнение чисел в компьютере?
Сообщение04.11.2012, 14:21 
Pavia в сообщении #639566 писал(а):
1.1) В качестве операции сравнения обычно применяют вычитание или булевую операцию "И"

Только не "И", а "XOR". Но она способна дать лишь флажок равенства, и отнюдь не флажок направления.

 
 
 
 Re: Как реализуется сравнение чисел в компьютере?
Сообщение18.07.2013, 16:09 
Из вики:
; Сравнение. В отличие от сложения, числа в дополнительном коде нельзя сравнивать, как беззнаковые,
; или вычитать без расширения разрядности. Один из методов состоит в сравнении как беззнаковые исходных чисел
; с инвертированным знаковым битом.

Пример сравнения двух чисел -32768...+32767 числа находятся в W0 и W8 (5 команд на ассемблере для PIC24)
btg W0,#15 ; инвертируем бит знака
btg W8,#15 ; инвертируем бит знака
cp W8,W0 ; сравнение как беззнаковых (W8-W0) C=0 если W8 < W0 или С=1 если W8 > W0 (С бит переноса) Z=1 если W8=W0
btg W0,#15 ; восстанавливаем бит знака
btg W8,#15 ; восстанавливаем бит знака

 
 
 
 Re: Как реализуется сравнение чисел в компьютере?
Сообщение19.07.2013, 15:15 
Аватара пользователя
Про числа со знаком тут уже достаточно сказали, поэтому рассмотрим сравнение натуральных чисел представленных цепочками (массивами) бит от старшего разряда к младшему. Для сравнения массивов одинаковой длины $L$ есть простое правило:
Цитата:
Если имеются два массива $x$ и $y$, то отношение $x < y$ выполняется в том и только в том случае, если существует индекс $k$ такой, что $x[k] < y[k]$ и $x[i] = y[i]$ для всякого $i < k$
(Н. Вирт. Алгоритмы + Структуры данных = программы. М.: Мир, 1985, С.27.)
Не нарушая общности для определенности будем считать $L=8$.
Пусть результат сравнения $z$ - массив из двух бит и пусть:
$z =00$, если $x=y$;
$z=10$, если $x>y$;
$z=01$, если $x<y$
Тогда:
Код:
// Шаг 1. Сравниваем x и y от старшего разряда к младшему:
if x[1] xor y[1] then k :=1 else
if x[2] xor y[2] then k :=2 else

if x[7] xor y[7] then k :=7 else k := 8;

// Шаг 2. Получаем результат:
if x[k] xor y[k] then
  begin
    z[1] := x[k] and 1;
    z[2] := not z[1];
  end
else
  begin
    z[1] := 0;
    z[2] := 0;
  end;

 
 
 
 Re: Как реализуется сравнение чисел в компьютере?
Сообщение19.07.2013, 16:57 
Аватара пользователя
PS Другой вариант. Кроме "И" и "ИЛИ" нам понадобятся еще две бинарные булевы функции:
1) Эквивалентность $(\neg A \vee B)\wedge  (A\vee \neg B)$ обозначим $A=B$.
2) Инверсия обратной импликации $\neg A \wedge B$ обозначим $A<B$.
Тогда:

$z[1] := (x[1]>y[1]) \vee 
((x[1]=y[1])  \wedge (x[2]>y[2]))  \vee 
((x[1]=y[1])  \wedge (x[2]=y[2])  \wedge  (x[3]>y[3]) ) \vee 
...
 \vee ((x[1]=y[1])  \wedge (x[2]=[2])  \wedge  ...\wedge (x[7]=y[7]) \wedge (x[8]>y[8]) );$
$z[2] := (x[1]<y[1]) \vee 
((x[1]=y[1])  \wedge (x[2]<y[2]))  \vee 
((x[1]=y[1])  \wedge (x[2]=y[2])  \wedge  (x[3]<y[3]) ) \vee 
...
 \vee ((x[1]=y[1])  \wedge (x[2]=[2])  \wedge  ...\wedge (x[7]=y[7]) \wedge (x[8]<y[8]) ).$

 
 
 
 Re: Как реализуется сравнение чисел в компьютере?
Сообщение19.07.2013, 17:28 
Аватара пользователя
Да всё куда проще. Надо не забывать ставить точку после операции. То есть, писать sub. вместо sub :-)

 
 
 
 Re: Как реализуется сравнение чисел в компьютере?
Сообщение19.07.2013, 17:36 
Аватара пользователя
Целочисленные числа (с фиксированной точкой) размером в слово сравниваются вычитанием без переноса результата в аккумулятор, но с установкой флагов. От значения флагов зависят, например команды условных переходов. Сравнение чисел (комбинация флагов указывающая на =, #, >, <=, <, >=) со знаком и без знака различаются командами. Сравнение чисел с плавающей точкой сложнее (по алгоритму).
А для оболваненных современным образованием студентов это делают зелёные человечки.

 
 
 
 Re: Как реализуется сравнение чисел в компьютере?
Сообщение19.07.2013, 18:29 
Аватара пользователя
arseniiv в сообщении #638520 писал(а):
Дано два числа $A$ и $B$, заданные двоичными строками $a \equiv (a_0,a_1,\ldots,a_n)$ и $b \equiv (b_0,b_1,\ldots,b_n)$.
1. Получаем разность $C = A - B$, вычитая по соотв. алгоритму

А вот это - лишнее: вполне достаточно лексикографической упорядоченности.
Хотя и применяется для машинных слов в случае быстройт реализации вычитания внутри процессора.

 
 
 
 Re: Как реализуется сравнение чисел в компьютере?
Сообщение19.07.2013, 20:47 
Если у вас есть сумматор и поразрядный инвертор (или как это называется?), и нужно уметь отличать положительное от отрицательного, то зачем в процессор запихивать ещё схемы для сравнения, когда можно сделать вычитание и проверить знак?

Хотя я не совсем вас понял.

 
 
 
 Re: Как реализуется сравнение чисел в компьютере?
Сообщение20.07.2013, 07:47 
Аватара пользователя
Если реализовывать сравнение на цифровой логике, то можно каскадировать (последовательно или параллельно) микросхему сравнения (цифровой компаратор) 4-х разрядных двоичных чисел 555СП1 или 8-разрядные 74LS68(2-7), 74AS866, 74AS885, 74AS11885. В справочнике можете посмотреть как они устроены, какие выводы имеют и как их каскадировать. Можно и микросхемы АЛУ использовать для сравнения.

 
 
 [ Сообщений: 24 ]  На страницу Пред.  1, 2


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group