Страница 1 из 3

переменная в двоичной системе

Добавлено: 21 июн 2006, 20:29
чайничек с крышечкой...
возможно ли в Дельфи об'явить переменную, чтоб она была в двоичной системе? Или надо писать функцию для перевода десятичной переменной в двоичную?
Собственно, мне надо заполнить таблицу mXn единицами и нулями, так, чтобы перебрать все возможные варианты.
Ну, например для n=4 должно получиться:
0001
0010
0011
0100
0101, и т.д.
Я так понимаю, что проще всего просто записывать в строки таблицы последовательные числа в двоичной системе.

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

Добавлено: 22 июн 2006, 11:13
Blood_Magic

Код: Выделить всё

function IntToBin(const Value,Digits:integer):string;
var
  i:integer;
begin
  i:=Value;
  Result:='';
  While i>0 do
    begin
      If i and 1=1 then Result:='1'+Result else Result:='0'+Result;
      i:=i shr 1;
    end;
  While Length(Result)<Digits do Result:='0'+Result;
end;

Добавлено: 22 июн 2006, 11:27
чайничек с крышечкой...
Спасибо!
Работает :)

А можно об'яснить для крашеной (может не все еще потеряно?...) блондинки? :o ops:
"shr" - это что?
и зачем здесь:
If i and 1=1 then Result:='1'+Result else Result:='0'+Result;
"and 1=1' оно же всегда верно...

Добавлено: 22 июн 2006, 12:18
Zromantmp
shr это сдвиг числа вправо. Т.е. если число перевести в двоичную систему, зачеркнуть самую правую цифру и дописать слева ноль, то получистя shr 1;
А по второму вопросу я сам не знаю.

Добавлено: 22 июн 2006, 12:19
Игорь Акопян
shr - операция побитового сдвига вправо (SHift Right) эквивалентно делению на 2
приоритет операции and выще, т.е. "If (i and 1)=1 then ..."

Добавлено: 22 июн 2006, 12:25
чайничек с крышечкой...
Игорь Акопян писал(а): приоритет операции and выще, т.е. "If (i and 1)=1 then ..."
а для тупых можно? :o ops: Зачем все-таки там "1"? Даже с приоритетм - не вижу разницы :(
если и "i', и "1" равны "1"... чем это отличается от если и=1"?

Добавлено: 22 июн 2006, 12:38
Игорь Акопян
это стандартная проверка установленно бита.
например:
i := 0101 (5)
(i and 1) = 1 // true
(i and 2) = 2 // false

если разложить побитно
0101 (5) and 0010 (2) = 0000

Добавлено: 22 июн 2006, 12:41
vunder
i and 1 - это побитовая операция (в школе учиться надо)
Например, число 13 имеет битовое представление 1101. Если к нему применить битовую операцию с числом 1 (0001), то результат будет 0001

Добавлено: 22 июн 2006, 12:50
чайничек с крышечкой...
vunder писал(а):i and 1 - это побитовая операция (в школе учиться надо)
....
А я совсем и не программист :!: :wink:
я использую программирование только как инструмент и "доучиваю" или разбираюсь с чем-то новым по мере необходимости.
Сейчас вот первый раз появилась на подобном форуме и книжки парраллельно читаю :roll: - поняла, что нехватает мне таких вот отрывочных знаний.
И вопросы тупые и "а все-таки как..." обычно появляются, когда человек хочет на самом деле разобраться, а не просто взять и воткнуть в программу чужой код! Так что "в школе учиться надо" - не к месту! :twisted:
Лучше бы ссылочку кинули где об этом почитать...

Добавлено: 22 июн 2006, 13:08
Blood_Magic
чайничек с крышечкой... писал(а):Лучше бы ссылочку кинули где об этом почитать...
http://www.r0.ru - вот ссылочка