Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Матчасть кодирование в двоичную ситему счисления 
V
    Опции темы
ErManDir
Дата 7.9.2006, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 11.12.2003

Репутация: нет
Всего: нет



Извиняюсь за глупый вопрос, но что-то инет мне на этот раз не помог, а в хелпе я что-то нифига не разобрался.
В общем задача такая:
Мне надо составить двоичное число из трех знаков, типа 000 или 010, потом его сконвертнуть в десятиричное и сохранить в базе, ну потом, естественно опять из 10-ти в 2-х и разобрать на биты. Как это сделать?

Наверняка двоичную переменную прийдется таскать через string, хотя не уверен. В общем, помогите плиз!
PM MAIL ICQ YIM   Вверх
Yanis
Дата 7.9.2006, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



http://forum.vingrad.ru/index.php?showtopic=17463
http://forum.vingrad.ru/index.php?showtopi...59&view=all

Добавлено @ 14:49 
ErManDir
Внизу страницы ещё ссылки.


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
ErManDir
Дата 7.9.2006, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 11.12.2003

Репутация: нет
Всего: нет



Спасибо за ссылки, но ответьте пожалуйста на вопрос: А встроенных инструментов разве не существует?
PM MAIL ICQ YIM   Вверх
Yanis
Дата 7.9.2006, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(ErManDir @  7.9.2006,  16:16 Найти цитируемый пост)
А встроенных инструментов разве не существует? 

Какие ещё инструменты? Есть calc.exe smile 
Есть стандартный класс TBits. Можно заморочиться и написать наследника TByte с нужными функциями.


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
ErManDir
Дата 7.9.2006, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 11.12.2003

Репутация: нет
Всего: нет



Да про TBits я как раз и не понял. Хотя он вроде для того и сушествует.

И насчет ссылок. Вторая ссылка утверждает, что:

100101

нумеруем его с хвоста начиная с нуля т.е.

5 4 3 2 1 0
|_|_|_|_|_|
1 0 0 1 0 1

теперь каждую двоичную цифру умножаем на 2 возводим в степень = нумерации и складываем т.е.

(2*1)^5+(2*0)^4+(2*0)^3+(2*1)^2+(2*0)^1+(2*1)^0=
32+0+0+4+0+1=37


Но это неправильно...

Правильно будет:
1*(2^5)+0*(2^4)+0*(2^3)+1*(2^2)+0*(2^1)+1*(2^0)=32+0+0+4+0+1=37

любое число в степени ноль всегда 1. Так что двоичное число 000, будет как 0+0+1=1, а это не правильно.
PM MAIL ICQ YIM   Вверх
Yanis
Дата 7.9.2006, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Если нужно именно для числе не больше 7, то можно так:
Код
TBinaryNum = array[0..2] of char;

function DecToBin(Num: Byte): TBinaryNum;
var
  i, l: byte;
begin
  Result := '000';
  if Num > 7 then Exit;

  l := High(Result);
  for i := 0 to l do
    Result[i] := IntToStr(Byte((Num and (1 shl (l - i))) > 0))[1];
end;


Добавлено @ 16:18 
Код
function BinToDec(Bits: TBinaryNum): Byte;
var
  i, l: Integer;
begin
  Result := 0;
  l := High(Bits);

  for i := 0 to l do
    if Bits[i] = '1' then Result := Result or (1 shl (l - i))
    else Result := Result and not (1 shl (l - i));
end;


Это сообщение отредактировал(а) Yanis - 7.9.2006, 16:11


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
ErManDir
Дата 8.9.2006, 04:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 11.12.2003

Репутация: нет
Всего: нет



Спасибо за пример с TBits. Завтра посмотрю его повнимательнее.
PM MAIL ICQ YIM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0594 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.