2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу Пред.  1, 2
 
 Re: Как реализуется сравнение чисел в компьютере?
Сообщение04.11.2012, 14:21 
Заслуженный участник


11/05/08
32166
Pavia в сообщении #639566 писал(а):
1.1) В качестве операции сравнения обычно применяют вычитание или булевую операцию "И"

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

 Профиль  
                  
 
 Re: Как реализуется сравнение чисел в компьютере?
Сообщение18.07.2013, 16:09 


18/07/13
1
Из вики:
; Сравнение. В отличие от сложения, числа в дополнительном коде нельзя сравнивать, как беззнаковые,
; или вычитать без расширения разрядности. Один из методов состоит в сравнении как беззнаковые исходных чисел
; с инвертированным знаковым битом.

Пример сравнения двух чисел -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 
Аватара пользователя


22/09/09

1907
Про числа со знаком тут уже достаточно сказали, поэтому рассмотрим сравнение натуральных чисел представленных цепочками (массивами) бит от старшего разряда к младшему. Для сравнения массивов одинаковой длины $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 
Аватара пользователя


22/09/09

1907
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 
Аватара пользователя


20/10/12
308
Да всё куда проще. Надо не забывать ставить точку после операции. То есть, писать sub. вместо sub :-)

 Профиль  
                  
 
 Re: Как реализуется сравнение чисел в компьютере?
Сообщение19.07.2013, 17:36 
Аватара пользователя


27/01/09
814
Уфа
Целочисленные числа (с фиксированной точкой) размером в слово сравниваются вычитанием без переноса результата в аккумулятор, но с установкой флагов. От значения флагов зависят, например команды условных переходов. Сравнение чисел (комбинация флагов указывающая на =, #, >, <=, <, >=) со знаком и без знака различаются командами. Сравнение чисел с плавающей точкой сложнее (по алгоритму).
А для оболваненных современным образованием студентов это делают зелёные человечки.

 Профиль  
                  
 
 Re: Как реализуется сравнение чисел в компьютере?
Сообщение19.07.2013, 18:29 
Заслуженный участник
Аватара пользователя


06/04/10
3152
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 
Заслуженный участник


27/04/09
28128
Если у вас есть сумматор и поразрядный инвертор (или как это называется?), и нужно уметь отличать положительное от отрицательного, то зачем в процессор запихивать ещё схемы для сравнения, когда можно сделать вычитание и проверить знак?

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

 Профиль  
                  
 
 Re: Как реализуется сравнение чисел в компьютере?
Сообщение20.07.2013, 07:47 
Аватара пользователя


27/01/09
814
Уфа
Если реализовывать сравнение на цифровой логике, то можно каскадировать (последовательно или параллельно) микросхему сравнения (цифровой компаратор) 4-х разрядных двоичных чисел 555СП1 или 8-разрядные 74LS68(2-7), 74AS866, 74AS885, 74AS11885. В справочнике можете посмотреть как они устроены, какие выводы имеют и как их каскадировать. Можно и микросхемы АЛУ использовать для сравнения.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу Пред.  1, 2

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group