Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2002.12.16;
Скачать: [xml.tar.bz2];

Вниз

Начинающим программистам. Этап 1   Найти похожие ветки 

 
Niki   (2002-10-29 18:40) [40]

> esu © (29.10.02 18:37)

Не понятно как-то.


 
Fog   (2002-10-29 18:51) [41]

Меня поставили в тупик. Жизнь потеряла смысл... :)


 
TTCustomDelphiMaster   (2002-10-29 18:58) [42]

Там же все написано. Читайте главу "Машинные форматы данных" - "Байт"


 
DeMoN-777   (2002-10-29 19:14) [43]

lipskiy http://delphi.adlen.ru/ нам нужен


 
Niki   (2002-10-29 19:31) [44]

СТОП! (see --- Niki (29.10.02 18:27))

Вопрос: можно ли вычитать числа в 2-ной системе столбиком, на бумаге?
Я прекрасно знаю, что a-b=a+(-b), дело не в этом. Хочу разобраться. Мы же здесь учимся, верно?
И спасибо за толковые разъяснения, а не за "Там же все написано".

>TTCustomDelphiMaster © (29.10.02 18:58)
Объясните, пожалуйста, Ваш ответ, относительно моего вопроса.


 
esu   (2002-10-29 19:57) [45]


> Niki (29.10.02 19:31)


положительное-отридцательное

(для простоты 4 бита)
0101 (десятичное 5)
Инверсные биты:
1010
Плюс 1 (дополнительный код)
1011 (детятичное -5)

отридцательное-положительное
1011
Инверсные биты
0100
+1 (доп код)
0101 (десятичное 5)

1011
+
0101
----
0000
(-5 + 5 = 0)


 
esu   (2002-10-29 20:18) [46]


> отридцательное

отрицательное :( Вторые сутки не сплю...


 
Niki   (2002-10-29 20:20) [47]

Я извиняюсь, что повторяюсь, и прошу прощения за неумение сформулировать вопрос.

Вопрос: можно ли вычитать числа в 2-ной системе столбиком, на бумаге?

Так, как мы делаем с обычными цифрами, например:
4582
-
2199
-----
2383
мы же не делаем так:
4582+(-2199), а применяя элементарные правила просто вычитаем.

Хочу понять эти правила для 2-ной системы.

Меня смутила эта фраза из статьи "Как и операция сложения, операция вычитания очень похожа на вычитание обычных десятичных чисел. Точно так же, как и при обычном вычитании, формируются междуразрядные заемы."

Теперь небольшой пример:

00110000
01100011
--------
11001101

Мне кажется, что если в данном примере производить опер. вычитания обычным способом, на бумаге ("столбиком"), то в разряде 0 должен стоять 0 (1-1=0). Хотя с помощью NEG и ADD получается как надо.
По моему я где-то путаюсь с этими заемами :)

Я прекрасно знаю, что a-b=a+(-b), дело не в этом. Хочу разобраться. Мы же здесь учимся, верно?

Спасибо.


 
Anatoly Podgoretsky   (2002-10-29 21:07) [48]


001 10000 заем из xxx1000.0 0010111.0
0 110001 1 0110001.1
-------- =========
11001101 xx00110.1

00110000 заем из 1.00xxxxxx 00xxxxxx
01xxxxxx
========
11xxxxxx

11001101


1.xxxxxxxx - это невидимый дополнительный разряд, также как при вычитании из 1.00 например 09 есть невидимый разряд 1*10^2

1.090
987
===
103 проверяем обратное вычисление

987 +
103 =
1.090

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


01100011 +
11001101 =
1.00110000


Естественно вместо вычитания в процессоре делается сложение с дополнением до двух

01100011 -> 10011100 + 1 -> 10011101 (not B + 1)


00110000 +
10011101
========
11001101


 
LongIsland   (2002-10-29 22:10) [49]

Я думаю, что эта ссылка не помешает... Жаль, что этого не было, когда я начинал:-( Многие вопросы сами собой отпали бы...


 
LongIsland   (2002-10-29 22:10) [50]

Черт, а ссылку забыл:-(
http://www.wasm.ru/article.php?article=1022001


 
Niki   (2002-10-30 11:56) [51]

> Anatoly Podgoretsky © (29.10.02 21:07)

Большое спасибо. Все понятно. Вижу свою ошибку.


 
Niki   (2002-10-31 11:55) [52]

Не дам умереть ветке :)

Привет всем!

Вот тут вопрос родился, опять по статье http://www.happytown.ru/prog/data/simple.html

В разделе Операции с байтами говорится, что " Операции АРИФМЕТИЧЕСКОГО СДВИГА ВПРАВО (SAR) и АРИФМЕТИЧЕСКОГО СДВИГА ВЛЕВО (SAL) имеют смысл для знаковых байт. Аналогичны операциям логических сдвигов, за исключением сохранения знака байта при сдвиге вправо. Логический и арифметический сдвиги влево полностью идентичны.

Обратите внимание, что при сдвиге вправо знаковый бит дублируется. Это позволяет сохранять знак байта. Как в операциях логических сдвигов флажек CF принимает значение последнего выдвинутого байта.
"

Вопрос следующий: А из каких соображений это сделано именно так? Почему не сохраняется знак при ариф. сдвиге влево, а вправо сохраняется? В чем заключается идея?

Спасибо.


 
al_   (2002-10-31 23:58) [53]

Лекции по информатике
Лекция 4
Арифметические основы компьютеров
- очень много пропущено при объяснении, там ссылаются на пример, а пример не показан :(
Тяжеловато так вот разбираться, тут мысли в голове путаются, а еще и при объяснении путают :(
P.s. Все-таки желательно проверять материал на осознабельность прежде чем давать на него ссылку ИМХО. Вот сами посудите:
http://www.i-u.ru/biblio/arhiv/books/noname_uchInform/ec4.asp
а так была бы полноценная лекция.

> LongIsland © (29.10.02 22:10)

Где ты раньше был =)


 
al_   (2002-11-02 17:30) [54]

Совершенно не понятно упражнение 6! =(


 
al_   (2002-11-02 17:48) [55]

и еще: подскажите принцип разложения -128 в обратный и дополнительный код!


 
Николай Быков   (2002-11-02 18:18) [56]

Если я правильно понял, то число -128 в дополнительном коде будет так же выглядеть, как и 128 в нормальном состоянии, только в регистре процессора флаг поднят будет. Я прав?


 
Anatoly Podgoretsky   (2002-11-02 18:27) [57]

В отрыве от разрядной сетки, ты понял неправильно, выглядеть будет ка +128, если же сетка 8 разрядная, то как -128


 
Николай Быков   (2002-11-02 18:34) [58]


> Anatoly Podgoretsky © (02.11.02 18:27)
> В отрыве от разрядной сетки, ты понял неправильно, выглядеть
> будет ка +128, если же сетка 8 разрядная, то как -128

Ну а вот трудно было подробнее объяснить?

ЗЫ
Рискую быть битым, но все же...


 
Anatoly Podgoretsky   (2002-11-02 20:13) [59]

Николай Быков © (02.11.02 18:34)
Это очень трудно объяснить, если ты не задаешь конкретного вопроса, а так какой то набор слов. Я например до сих пор не знаю, а что ты хочешь узнать, ты свой вопрос до сих пор не расшифровал, абсолютно любой ответ подходит на твой вопрос.

Особенно про какой то таинственный флаг, какой тебя именно флаг интересует, какова разрядность, процессор работает с дополнение до единицы или до двух?


 
Юрий Зотов   (2002-11-02 20:40) [60]

> Николай Быков © (02.11.02 18:18)

> Если я правильно понял, то число -128 в дополнительном коде
> будет так же выглядеть, как и 128 в нормальном состоянии,

Зависит от длины разрядной сетки. Об этом и говорит Анатолий. Напишите -128 в 8-битной и 16-битной сетках - увидите сами.


 
Anatoly Podgoretsky   (2002-11-02 20:51) [61]

Юрий Зотов © (02.11.02 20:40)
Я тут еще упомянул и процессоры с дополнением до единицы, а не до двух (IBM) про них уже многие забыли, вот там отричательные и положительные выглядят одинаково, за исключением знакового разряда, зато у них два нудя +0 и -0, может помнишь такие?
А упомянул я их потому что это имеет отношение к теории. Нам правда не стоит в них углубляться но упомянуть их стоит, для понимания общей теории.


 
Юрий Зотов   (2002-11-02 21:27) [62]

> al_ © (02.11.02 17:30)

Пожалуйста, приводите прямо в вопросе ссылку на Web-страницу, чтобы можно было просто кликнуть, а не искать.


> Anatoly Podgoretsky © (02.11.02 20:51)

Ох... да я был бы счастлив, если бы народ хотя бы этот минимум как следует понял... что уж там про общую теорию вспоминать...


 
Niki   (2002-11-04 12:42) [63]

?

Смотри ---> Niki (31.10.02 11:55)


 
han_malign   (2002-11-04 12:49) [64]

-i == (not i)+1


 
DeMoN-777   (2002-11-04 12:59) [65]

Абалдеть, народ помогите плиз. Прочитал почти все статьи на которые линковали в этих ветках. Читал внимательно, старался понять, перечитывал. Только не понятно как это всё работает ?
Можно линк на более начальный материал ?


 
han_malign   (2002-11-04 13:03) [66]

и в Дельфях был класный прикол
var dw: DWORD;
begin
for dw:=0 to $8000 do ...
внутри параметр приводился к знаковому и происходило заворачивание счетчика на -($7FFF)(естественно < +($8000)) и получался вечный цикл(не помню сейчас убрано или нет, но для беззнаковых приходилось пользовать while)


 
Oleg_Gashev   (2002-11-04 13:04) [67]

Еще стоит рассмотреть двоично-десятичное представление чисел. Но я вроде Вас тороплю.


 
Niki   (2002-11-04 16:22) [68]

> han_malign © (04.11.02 12:49)

Это ответ на мой вопрос о SAR и SAL?


> All Смотри ---> Niki (31.10.02 11:55)


 
al_   (2002-11-05 01:51) [69]

У меня накопилось куча вопросов:
1) Почему в этом случае -120-15 у меня получается +7?

10000111 обр. (-120)
11110000 обр. (-15)
101110111 (переполнение стека)
1
01111000 => 00000111 = 7

Где ошибка?
2) Нужно ли разбирать вычисления с плавающей запятой?
3) Из упражнений, что вы привели я НИ ОДНОГО НЕ СМОГ РЕШИТЬ! (хотя очень досканально читал и прорешивал все)
4) Упражнение 6 - это наверно разговор на разных языках, достал справку WinAPI, прочитал ничерта не понял :(
P.s. Я уже как 6 часов нахожусь в преддаунском состоянии.


 
DeMoN-777   (2002-11-06 23:57) [70]

1. Не дам умереть ветке.
2. А как же на счёт моего поста ? DeMoN-777 © (04.11.02 12:59)


 
al_   (2002-11-07 12:36) [71]


> Юрий Зотов ©
>Короче говоря: срок выполнения задания - до воскресенья.
> Потом идем дальше. Не теряйте времени, есть вопросы - спрашивайте.

Спрашивать, то мы спрашиваем, а вот отвечать некому :(


 
Набережных С.   (2002-11-07 16:18) [72]

>al_ © (05.11.02 01:51)

1)Будь внимательнее.

10000111 обр. (-120)
11110000 обр. (-15)
101110111 (переполнение стека)
1
01111000 => 10000111 = 135

2)Когда Учитель скажет
3)См. п.1.


 
al_   (2002-11-08 01:13) [73]


> Набережных С. (07.11.02 16:18)

Я стараюсь быть максимально внимательным, но:
по п.1. у меня те же цифры получились, только откула появилась
первая единица (это происходит при переполнении стека), т.е. она меняет разрядность?
по п.3. - не серьезно, что-то сложноваты задания :(
может с кем-нибудь по мылу пообщаемся на тему упражнений. А то ведь на мертвой точке нахожусь :(


 
al_   (2002-11-08 01:15) [74]


> Набережных С. (07.11.02 16:18)

Я стараюсь быть максимально внимательным, но:
по п.1. у меня те же цифры получились, что при переполнении стека в двух отрицательных числах потом меняем знаковый бит на противоположный?
по п.3. - не серьезно, что-то сложноваты задания :(
может с кем-нибудь по мылу пообщаемся на тему упражнений. А то ведь на мертвой точке нахожусь :(


 
Николай Быков   (2002-11-08 01:21) [75]

А что конкретно ты в справке по WinAPI не понял? Какой ты раздел читал? Надеюсь ты не читал справку по WinАРI на русском языке?
Думаю, что смогу тебе с WinAPI помочь


 
al_   (2002-11-08 01:54) [76]


> Николай Быков © (08.11.02 01:21)

Да, читал именно рускую справку про wm_keydown. Но я не врубаюсь, как это разложить, как понимать??? Где раскладывать, в чем раскладывать, каким образом??? Так что ВОТ


 
Николай Быков   (2002-11-08 04:16) [77]

НАчнем по порядку:

> Да, читал именно рускую справку про wm_keydown

Ни в коем случае не читай эту лабуду!!! У тебя есть Delphi, там есть замечательная справка, называется Windows SDK HELP. Все по WInAPI нужно читать именно там.

> Но я не врубаюсь

> как понимать???

Я тебе принцип работы win32 приложений чуть выше объяснил. Если все равно не понятно, то приведи конкретнострочку, в которой тебе не понятно. Если все вместе не понятно, то не отчаивайся, Я раньше не мог понять производные и интегралы.


> каким образом???

Это в статьях по занятиям Юрия Зотова написано

> Где раскладывать

В WinMIN приложении. Если тебе интересно, то ищешь примеры к книге Б. Красного по OpenGL. Там в самом начале находишь это WinMIN приложение(самое первое, которое ни на что реагировать не умеет еще), дополняешь Оконную процедуру реакцией на WM_KEYDOWN и пробуешь раскладывать. Результаты удобно в Caption формы выводить. + тут можно поискать про создание WinMIN приложений, но я сомневаюсь что они есть на этом сайте, а поиск зарускать лень+он не очень тут нормально функционирует :-)


 
Набережных С.   (2002-11-08 12:15) [78]

>al_ © (08.11.02 01:54)
Старшая единица - это и есть переполнение разрядной сетки. И у тебя ошибка при инвертировании в последней строке.
Однако удобней пользоваться дополнительным кодом:
8 разрядов позволяют представить числа от 10000000(-128) до 01111111(+127). Старший разряд - знак, единица - минус, ноль - плюс. Есть два способа перевода в дополнительный код.
Первый:
1) 0000 0101 -> Берем модуль числа -5
2) 1111 1010 -> инвертируем все разряды
3) 1 -> прибавляем 1(переполнение отбросим, если будет)
4) 1111 1011 -> получили -5 в дополнительном коде

Второй:
1) 0000 0101 -> Берем модуль числа -5
2) 1111 1111 -> прибавляем число с единицами во всех разрядах
3) 1 0000 0100 -> переполнение отбрасываем
4) 1111 1011 -> инвертируем сумму,получили то-же самое.

С дополнительными числами можно выполнять обычные операции. В арифметике: 7-5=7+(-5), т.е. к 7 прибавить -5:
0000 0111 -> 7
1111 1011 -> -5 в дополнительном коде, суммируем
1 0000 0010 -> переполнение сетки отбрасываем, получаем 2.
Если выполнить -7+5:
1111 1001 -> -7 в дополн. коде
0000 0101 -> 5
1111 1110 -> -2 в доп. коде.

Единица в старшем разряде говорит об отрицательном результате. Чтобы получить модуль, нужно выполнить то-же самое, т.е. методика обратимая:
1111 1110 -> -2
0000 0001 -> инверсия
1 -> прибавляем 1, отбрасываем переполнение
1 0000 0010 -> получили 2, модуль числа -2.



 
Набережных С.   (2002-11-08 12:22) [79]

Тэги спутал
Удобней пользоваться дополнительным кодом:
8 разрядов позволяют представить числа от 10000000(-128) до 01111111(+127). Старший разряд - знак, единица - минус, ноль - плюс. Есть два способа перевода в дополнительный код.
Первый:
1) 0000 0101 -> Берем модуль числа -5
2) 1111 1010 -> инвертируем все разряды
3) 1 -> прибавляем 1(переполнение отбросим, если будет)
4) 1111 1011 -> получили -5 в дополнительном коде

Второй:
1) 0000 0101 -> Берем модуль числа -5
2) 1111 1111 -> прибавляем число с единицами во всех разрядах
3) 1 0000 0100 -> переполнение отбрасываем
4) 1111 1011 -> инвертируем сумму,получили то-же самое.

С дополнительными числами можно выполнять обычные операции. В арифметике: 7-5=7+(-5), т.е. к 7 прибавить -5:
0000 0111 -> 7
1111 1011 -> -5 в дополнительном коде, суммируем
1 0000 0010 -> переполнение сетки отбрасываем, получаем 2.
Если выполнить -7+5:
1111 1001 -> -7 в дополн. коде
0000 0101 -> 5
1111 1110 -> -2 в доп. коде.

Единица в старшем разряде говорит об отрицательном результате. Чтобы получить модуль, нужно выполнить то-же самое, т.е. методика обратимая:
1111 1110 -> -2
0000 0001 -> инверсия
1 -> прибавляем 1, отбрасываем переполнение
1 0000 0010 -> получили 2, модуль числа -2.



 
al_   (2002-11-11 19:54) [80]


> Набережных С. (08.11.02 12:22)

Спасибки!!! А у меня еще есть один-два вопроса!
1. Как понять "Уметь проверить и выставить любой бит в любое значение"?
2. Пойдет ли книга, В.В.Фараонов "Delphi 6 - учебный курс" М.: 2001 г., для обучения?



Страницы: 1 2 3 вся ветка

Форум: "Потрепаться";
Текущий архив: 2002.12.16;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.62 MB
Время: 0.008 c
14-51892
sancho
2002-11-23 17:34
2002.12.16
freepascal


4-52010
Алексей Ким
2002-11-02 10:23
2002.12.16
menu


14-51908
AgentDelphi
2002-11-24 17:04
2002.12.16
Как прослушать звук с микрофона?


14-51905
LEgO-2
2002-11-22 08:44
2002.12.16
программирование за деньги...


4-52005
Demn
2002-11-03 07:13
2002.12.16
Как вызвать системное окошко с пропертисами файла





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский