Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.05.06;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.041 c
15-1175983759
Andy BitOff
2007-04-08 02:09
2007.05.06
Возможно ли? Есть ли средства?


2-1176362871
allucard
2007-04-12 11:27
2007.05.06
Хранение второго значения в ListBox.


2-1176805357
Fynjy1984
2007-04-17 14:22
2007.05.06
Помогите правильно составить запрос


15-1175974189
mike888777666
2007-04-07 23:29
2007.05.06
антиспам


2-1176780365
Romm
2007-04-17 07:26
2007.05.06
Защита файла от удаления





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский