Страница 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
чайничек с крышечкой...
Спасибо!
Работает
А можно об'яснить для крашеной (может не все еще потеряно?...) блондинки?

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 ..."
а для тупых можно?

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 - это побитовая операция (в школе учиться надо)
....
А я совсем и не программист :!:
я использую программирование только как инструмент и "доучиваю" или разбираюсь с чем-то новым по мере необходимости.
Сейчас вот первый раз появилась на подобном форуме и книжки парраллельно читаю :roll: - поняла, что нехватает мне таких вот отрывочных знаний.
И вопросы тупые и "а все-таки как..." обычно появляются, когда человек хочет на самом деле разобраться, а не просто взять и воткнуть в программу чужой код! Так что "в школе учиться надо" - не к месту! :twisted:
Лучше бы ссылочку кинули где об этом почитать...
Добавлено: 22 июн 2006, 13:08
Blood_Magic
чайничек с крышечкой... писал(а):Лучше бы ссылочку кинули где об этом почитать...
http://www.r0.ru - вот ссылочка