Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Двоичная арифметика. Добавлено: 12.01.06 05:26  

Автор вопроса:  CyRax  | Web-сайт: basicproduction.nm.ru | ICQ: 204447456 
Написал вот модуль двоичной арифметики. Жду коментариев.

Описание.
 Базовые операции для 64-битных беззнаковых целых чисел. Способ представления чисел идентичен стандарту Intel (перевёрнутые байты). Реализованы сложение, вычитание, умножение, деление, сдвиги, преобразование строки в число и наоборот. Рекомендуется для изучения двоичной арифметики.

PS: Ах да, совсем забыл :). Язык - VB6.

Ответить

  Ответы Всего ответов: 26  

Номер ответа: 1
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #1
Добавлено: 12.01.06 05:28
http://basicproduction.nm.ru/BPALU.rar

Ответить

Номер ответа: 2
Автор ответа:
 [root]



Вопросов: 45
Ответов: 1212
 Web-сайт: bit.pirit.info
 Профиль | | #2
Добавлено: 12.01.06 10:56
Скачаем и посмотрим ;-)

Ответить

Номер ответа: 3
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #3
Добавлено: 13.01.06 05:09
Ещё будет вторая версия с вещественными числами. Правда до умножения и деления наверное я не дойду. Может вообще ограничусь конвертированием строки в число и обратным.

Ответить

Номер ответа: 4
Автор ответа:
 [root]



Вопросов: 45
Ответов: 1212
 Web-сайт: bit.pirit.info
 Профиль | | #4
Добавлено: 13.01.06 11:02
Гуд гуд!
Думаю очень гуд

Ответить

Номер ответа: 5
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #5 Добавлено: 16.01.06 10:48
Не качал, но наверняка отстой :))
Щютка :)))

Ответить

Номер ответа: 6
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #6
Добавлено: 17.01.06 14:48
 Не совсем удачная шутка, ну да ладно. Кто то смотрел ещё? А то числа с плавающей запятой уже на подходе. Я думаю они вызовут больший интерес, поэтому даже написал статью об их устройстве.

Ответить

Номер ответа: 7
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #7
Добавлено: 17.01.06 19:15
Вычисления кстати можно ускорить если переделать алгоритм сдвигов так, чтобы считал процессор, т.к. и умножение и деление их интесивно использует. Но это если кому то нужно будет для реальных расчётов.

Ответить

Номер ответа: 8
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #8 Добавлено: 17.01.06 20:56
Я смотрел, не более... чё-то там считает :)...

Ответить

Номер ответа: 9
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #9
Добавлено: 17.01.06 21:10
Та это демка. В цикле INC и DEC крутятся, ну чтобы не скучно было. А ценные там сложение, вычитание, умножение и деление. Ну и программные VAL, STR, BIN и HEX. Ими все часто пользуются и скорее всего рано или поздно возникнет желание глянуть как они работают. Ну вот собственно на VB, не на ассемблере заметьте, а на VB :)

Ответить

Номер ответа: 10
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #10
Добавлено: 17.01.06 21:17
Если кто то всё же переборет сильнейшие приступы сонливости и почитает подробнейшие коментарии к коду и найдёт их непонятными - дайте знать, а то знаете ли снимки с памяти одних людей могут совершенно ничего не значить для других. Хотя я всё же старался оставлять инструкции, а не кадры моей памяти, как любят иногда делать коментаро-статье писатели :)

Ответить

Номер ответа: 11
Автор ответа:
 SerJ



Вопросов: 24
Ответов: 332
 Профиль | | #11 Добавлено: 18.01.06 00:19
И я качал, смотрел, правда, не очень понял (пока нету времени разбираться, а скачал ради интереса), но, может троха не в тему, скажи, как написать ф-ции типа Dec2Bin и обратно.
2 UL.eXe: ответы типа "Написать просто - ручками" не предлагать.
Знаю, что это задачка для первого класса ВБ программинга, но давно этим не пользовался - забыл.

Ответить

Номер ответа: 12
Автор ответа:
 [root]



Вопросов: 45
Ответов: 1212
 Web-сайт: bit.pirit.info
 Профиль | | #12
Добавлено: 18.01.06 01:19
Преобразование между десятичными, шестнадцатеричными и двоичными числами

Dim lDec As Long, aHex As String, aBin As String
lDec = 121
aHex = Hex$(lDec) ' Десятичное в шестнадцатеричное
lDec = Val("&H" & aHex) ' Шестнадцатеричное в десятичное

Обратите внимание, что не составляет труда преобразовать шестнадцатеричное значение в двоичное, поэтому, чтобы преобразовать из десятичного в шестнадцатеричное, удобней сперва преобразовать десятичное в двоичное. Наиболее быстрый способ двоичного преобразования, это использовать специальную таблицу преобразования.

Dim vBinTable As Variant
vBinTable = Array("0000", "0001", "0010", "0011", _
"0100", "0101", "0110", "0111", _
"1000", "1001", "1010", "1011", _
"1100", "1101", "1110", "1111";)
Dim i As Integer, k As Long
For k = 1 To Len(aHex)
' Шестнадцатеричное в двоичное
i = Val("&H" & Mid$(aHex, k, 1))
aBin = aBin & vBinTable(i)
Next

Так же несложно сделать преобразование из двоичного значения в десятичное. Однако, это не всегда выполнимо, так как шестнадцатеричные и двоичные значения в VB могут представлять из себя намного большие размеры чем десятичное значение. Таким образом для преобразование из двоичного в шестнадцатеричное опять прибегнем к таблице преобразования, только другого типа.

Dim aBinTable As String, aHexTable As String
aBinTable = " 0000 0001 0010 0011 0100 0101 0110 0111" & _
" 1000 1001 1010 1011 1100 1101 1110 1111 "
aHexTable = "0123456789ABCDEF"
If Len(aBin) Mod 4 Then
' Делаем длину чётной 4
aBin = String$(Len(aBin) Mod 4, "0";) & aBin
End If
aHex = ""
For k = 1 To Len(aBin) Step 4
i = InStr(aBinTable, " " & Mid$(aBin, k, 4))
aHex = aHex & Mid$(aHexTable, (i - 1) \ 5 + 1, 1)
Next

Ответить

Номер ответа: 13
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #13
Добавлено: 18.01.06 04:44
Десятичную в двоичную - это деление с остатком. Например 10
10/2=5 и 0 остаток
5/2=2 и 1 остаток
2/2=1 и 0 остаток
1/2=0 и 1 остаток

Ответ: 1010.
Обратно каждый разряд по степеням двойки. Что такое разряд надеюсь знаешь? Ну там единицы, десятки, сотни, тысячи и т.д. Ну вот, всё это степени 10. Например, 1,10,100,1000. Для двоичной тоже самое: 1,10,100,1000, только в переводе в десятичную это будет: 1,2,4,8.
1010 = (1*8)+(0*4)+(1*2)+(0*1)=8+2=10

или 32
32/2=16 и 0 остаток
16/2=8 и 0 остаток
8/2=4 и 0 остаток
4/2=2 и 0 остаток
2/2=1 и 0 остаток
1/2=0 и 1 остаток
Проверка: 100000
(1*32)+(0*16)+(0*8)+(0*4)+(0*2)+(0*1)=32

Вобщем тебе нужно запомнить разряды двоичной системы и считать будет гораздо легче. Например 15-й разряд - это 2^15, 31 разряд - 2^31 и т.д.

Ответить

Номер ответа: 14
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #14
Добавлено: 18.01.06 05:12
Тоже самое и для 16-ричной.

71199/16=4449 и F остаток
4449/16=278 и 1 остаток
278/16=17 и 6 остаток
17/16=1 и 1 остаток
1/16=0 и 1 остаток

71199=1161F

Вобщем ты понял что при делении на какое либо число, остаток не может превышать этого числа.
Остаток - это не нечто абстрактное, а один из способов показать какая часть числа не соответствует полному разряду. Например, 23 - два полных разряда второй степени и остаток 3 более низкого разряда первой степени.

Ответить

Номер ответа: 15
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #15
Добавлено: 19.01.06 04:48
Как и обещал, добавил процедуры конвертации дробного числа в строку и обратно.
Вместе с вводной статьёй можно найти по адресу
http://basicproduction.nm.ru/articles/bpdblvb.htm

Пожалуйста, ваши коментарии.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам