Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.05.06;
Скачать: CL | DM;

Вниз

Булева алгебра. Разминка.   Найти похожие ветки 

 
Johnmen ©   (2007-04-17 11:18) [0]

Всем привет!

Поможите старому больному программисту, дайте немного байтов кода (чем меньше, тем лучше) для поддержания на плаву никому не нужной программы. :)

Суть задачи.
Имеется:
I, J : integer;
B : boolean;
Требуется:
взвести J-ый бит в I, если B истинно, и
сбросить J-ый бит в I, если B ложно.

Кто решит, тот претендент на награду... :)
Просьба господ с голубыми значками не проявлять излишней активности...

Удачи! Спасибо!


 
Leonid Troyanovsky ©   (2007-04-17 11:26) [1]


> Johnmen ©   (17.04.07 11:18)  

> Кто решит, тот претендент на награду... :)

Премию Дарвина?
Ухожу, ухожу.

--
Regards, LVT.


 
Johnmen ©   (2007-04-17 11:33) [2]


> Leonid Troyanovsky ©   (17.04.07 11:26) [1]
> Премию Дарвина?

Ещё не решил. Посмотрим :)


 
Desdechado ©   (2007-04-17 11:37) [3]

А если J отрицательное или больше 31?


 
Сергей М. ©   (2007-04-17 11:40) [4]


> чем меньше, тем лучше


"чем меньше" чего - исх.текста или машкода ?)


 
DrPass ©   (2007-04-17 11:42) [5]


> А если J отрицательное или больше 31?

цивилизация окажется на грани гибели


 
Ega23 ©   (2007-04-17 11:45) [6]


> Johnmen ©   (17.04.07 11:18)


У меня где-то была такая ботва. Одной сточкой. Вроде даже ты мне её и давал...  :)


 
DrPass ©   (2007-04-17 11:46) [7]

i:= i and (integer(b) shl j or not(1 shl j))


 
Sha ©   (2007-04-17 11:49) [8]

 
 if b
 then i:=i or (1 shl j)
 else i:=i and (not (1 shl j));


 
Сергей М. ©   (2007-04-17 11:50) [9]

Уложусь в 16 байт машкода при условии локальности переменных i,j,b.
Кто меньше ?)


 
DrPass ©   (2007-04-17 11:55) [10]


> Сергей М. ©   (17.04.07 11:50) [9]

Включая инициализацию регистров или нет?


 
Johnmen ©   (2007-04-17 11:58) [11]


> "чем меньше" чего - исх.текста или машкода ?)

исх.текста

> Sha ©   (17.04.07 11:49) [8]

Не, это не наш метод :)


 
Сергей М. ©   (2007-04-17 11:59) [12]


> DrPass ©   (17.04.07 11:55) [10]


Нет, конечно)


 
Сергей М. ©   (2007-04-17 12:00) [13]


> Johnmen ©   (17.04.07 11:58) [11]


> исх.текста


Не, это не наш метод))


 
Sha ©   (2007-04-17 12:02) [14]

Ну тогда так

 i:=i and (not (1 shl j)) or (ord(b) shl j);


 
Johnmen ©   (2007-04-17 12:02) [15]


> DrPass ©   (17.04.07 11:46) [7]

Тут у вас ошибочка вышла...:)


 
Johnmen ©   (2007-04-17 12:05) [16]


> Sha ©   (17.04.07 12:02) [14]

И у тебя ошибочка :)


 
Sha ©   (2007-04-17 12:09) [17]

> Johnmen ©   (17.04.07 12:05) [16]

Наверно, какие-то исходные данные дают неврный результат? ))


 
DrPass ©   (2007-04-17 12:09) [18]


> Johnmen ©   (17.04.07 12:02) [15]

Почему? Работает (при условии соблюдения диапазонов значений, естессно)


 
Amoeba ©   (2007-04-17 12:10) [19]

А если задействовать следующие ф-ии (взято из QStrings) для установки и сброса бита?

function Q_BitSet(P: Pointer; Index: Integer): Boolean;
asm
       BTS     [EAX],EDX
       SETC    AL
end;

function Q_BitReset(P: Pointer; Index: Integer): Boolean;
asm
       BTR     [EAX],EDX
       SETC    AL
end;


 
Johnmen ©   (2007-04-17 12:11) [20]


> DrPass ©   (17.04.07 11:46) [7]
> Sha ©   (17.04.07 12:02) [14]

Что, засомневались? :)
Всё правильно.... Только у Sha покороче...


 
Sha ©   (2007-04-17 12:17) [21]

> DrPass ©   (17.04.07 11:46) [7]
> i:= i and (.....)

Че-то не въеду, этим ты тока сбросишь биты, а установка где?


 
DrPass ©   (2007-04-17 12:20) [22]


> Sha ©   (17.04.07 12:17) [21]

Да, ты прав :)

> Johnmen ©   (17.04.07 12:11) [20]

И ты :)


 
Johnmen ©   (2007-04-17 12:22) [23]


> Sha ©   (17.04.07 12:02) [14]

А ещё короче сможешь? :)


 
DrPass ©   (2007-04-17 12:22) [24]

Забыл добавить еще один or ord(b) shl j


 
Sha ©   (2007-04-17 12:29) [25]

> Johnmen ©   (17.04.07 12:22) [23]
> А ещё короче сможешь? :)

Если надо одним паскальным оператором - то не получится.
При помощи первого and мы всегда сбрасываем бит,
а последующий or поднимает его, если требуется.


 
Johnmen ©   (2007-04-17 12:46) [26]


> Sha ©   (17.04.07 12:29) [25]

Да, у меня тоже короче не выходит. И мой вар-т длиннее на 5 байт :)

Всем спасибо за участие!
Взбодрили старого больного программиста.
Приз будет вручён Sha при личной встрече ;)



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

Текущий архив: 2007.05.06;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.015 c
3-1171378156
dest81
2007-02-13 17:49
2007.05.06
ib и удаленный доступ


15-1175902656
SerJaNT
2007-04-07 03:37
2007.05.06
Просьба администраторам


2-1176840303
Михась
2007-04-18 00:05
2007.05.06
В каждой строке матрицы А(8,12) вместо минимального элемента запи


2-1176655582
Bambuk
2007-04-15 20:46
2007.05.06
Изменение региональных настроек


2-1176795142
webpauk
2007-04-17 11:32
2007.05.06
Загрузка из ftMemo в TStringList