Форум: "Прочее";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
ВнизКак уменьшить такую конструкцию? Найти похожие ветки
← →
Tuk (2010-01-31 04:50) [0]if A > 1 then
begin
if not B then
ChangeSize;
end
else
if B then
ChangeButtonSize;
← →
Tuk (2010-01-31 04:55) [1]Ой правильно будет так:
if A > 1 then
begin
if not B then
ChangeSize;
end
else
if B then
ChangeButton;
← →
KilkennyCat © (2010-01-31 05:44) [2]if A > 1 then if B then ChangeButton else ChangeSize;
← →
test © (2010-01-31 06:01) [3]if (A > 1) and B then ChangeButton else ChangeSize;
← →
Tuk (2010-01-31 06:11) [4]Я извиняюсь, видимо ночь влияет.
Эти два метода одинаковы. :)
Вот окончательный вариант. Еще раз сорри, я не специально.
if A > 1 then
begin
if not B then
ChangeSize;
end
else
if B then
ChangeSize;
← →
KilkennyCat © (2010-01-31 10:19) [5]
> test © (31.01.10 06:01) [3]
да, ты прав, я что-то невнимательно с бегинами ендами обошелся...
← →
jack128_ (2010-01-31 11:13) [6]
if (A > 1) <> B then
ChangeSize();
← →
Кто б сомневался © (2010-01-31 16:13) [7]if (A > 1) xor B then
ChangeSize();
← →
Кто б сомневался © (2010-01-31 16:14) [8]Мой вариант быстрее [6] и круче выглядит :).
← →
Игорь Шевченко © (2010-01-31 18:57) [9]
> быстрее [6]
На каком основании ?
> и круче выглядит :).
Это имеет решающее значение для увольнения
← →
Jeer © (2010-01-31 21:29) [10]
> Игорь Шевченко © (31.01.10 18:57) [9]
Ну как ты не понял - его варианте использован bold-шрифт. :)
← →
Rouse_ © (2010-01-31 21:37) [11]
> Кто б сомневался © (31.01.10 16:14) [8]
> Мой вариант быстрее [6] и круче выглядит :).
За такие чудеса уже много крутышек поувольняли :)
← →
KilkennyCat © (2010-01-31 22:01) [12]можно еще короче: ChangeSize(A, B);
← →
Кто б сомневался © (2010-01-31 22:42) [13]
> Это имеет решающее значение для увольнения
if (A > 1) xor B then
ChangeSize();
Чем не нравится? Вариант полностью рабочий, не путанный и прозрачный. Или может программисту трудно понять что делает xor?
Значит это не программист - это его проблемы с квалификацией.
← →
Игорь Шевченко © (2010-01-31 22:43) [14]
> Или может программисту трудно понять что делает xor
программисту нафиг не надо понимать, что делает xor, ему зарплату не за это платят
← →
Кто б сомневался © (2010-01-31 22:44) [15]Тогда в чем проблема в [9]? Уточните.
← →
Кто б сомневался © (2010-01-31 22:45) [16]
> Игорь Шевченко © (31.01.10 18:57) [9]
>
>
> > быстрее [6]
>
>
> На каком основании ?
На том основании что XOR быстрее CMP
← →
Jeer © (2010-01-31 22:52) [17]
> Кто б сомневался © (31.01.10 22:44) [15]
>
> Тогда в чем проблема в [9]? Уточните.
Проблема в том, что тебя за такое "смешивание" прикладной и асм. логики не то, что уволят, но даже на работу не возьмут.
← →
Кто б сомневался © (2010-01-31 22:55) [18]
> Проблема в том, что тебя за такое "смешивание" прикладной
> и асм. логики не то,
Что за бред уважаемый.
If A or B then или
if A and B then -
Встречается на каждом шагу битовая логика, вы с луны что-ли свалились?
← →
Кто б сомневался © (2010-01-31 22:55) [19]Или недоучились?
← →
Игорь Шевченко © (2010-01-31 22:55) [20]Кто б сомневался © (31.01.10 22:44) [15]
В 9 нет проблем
> На том основании что XOR быстрее CMP
Точно быстрее ? Готов аргументировать ?
← →
Кто б сомневался © (2010-01-31 22:58) [21]Jeer © (31.01.10 22:52) [17]
If A or B then или
if A and B then
If not A and B then
if not A then
if A or not B then
Вы посмотрите в какой нибудь хороший код, хотя бы в VCL -там такое частенько встречается.
← →
Кто б сомневался © (2010-01-31 22:59) [22]
> Точно быстрее ? Готов аргументировать ?
Ты сначала свои аргументы покажи, почему CMP быстрее (или равно) XOR будет..
← →
Jeer © (2010-01-31 23:05) [23]
> Кто б сомневался © (31.01.10 22:55) [19]
>
> Или недоучились?
Все на что смог твой мозг ?
← →
Игорь Шевченко © (2010-01-31 23:07) [24]Кто б сомневался © (31.01.10 22:59) [22]
Слив защитан
← →
Jeer © (2010-01-31 23:08) [25]> Кто б сомневался © (31.01.10 22:58) [21]
Иди и подумай разницу между битовой и прикладной логикой.
← →
Anatoly Podgoretsky © (2010-01-31 23:16) [26]
> Кто б сомневался © (31.01.10 22:59) [22]
Не пойдет, это ты стал утверждать, без доказательств. Вот и давай доказывай - это первое, а второе нафиг нужно, лучше более естественноые, более понятные конструкции без выкрутасов.
← →
Кто б сомневался © (2010-01-31 23:23) [27]
> второе нафиг нужно, лучше более естественноые, более понятные
> конструкции без выкрутасов.
Что значит более естественные? Что тут понимать, трудно понять что такое исключающее или?
чем оно менее естественнее для программиста чем <>?
если вы говорите про ествественное "или", которые использует человек (т.е. тот самый союз "или" - кошка или собака), то
это как раз xor, а не or - т.к. человек обычно выбирает или одно , или другое (xor), а не одно или другое или сразу и то и другое вместе (как в случае с or).
← →
Кто б сомневался © (2010-01-31 23:24) [28]
> обычно выбирает
Точнее имеет в виду. Не два предмета, а один из них.
← →
Anatoly Podgoretsky © (2010-01-31 23:26) [29]> Кто б сомневался (31.01.2010 23:23:27) [27]
Ты не читай мне лекцию, что такое XOR ты ближе к телу.
← →
KilkennyCat © (2010-01-31 23:27) [30]
> Иди и подумай разницу между битовой и прикладной логикой.
а каким местом это?
Собственно, ни у кого не вызывает проблем if (a > b) and (c > d) ? Тогда почему вызывает проблема хоr? not, and, or и xor - все из одной кучи.
← →
Кто б сомневался © (2010-01-31 23:31) [31]
> Anatoly Podgoretsky © (31.01.10 23:26) [29]
>
> > Кто б сомневался (31.01.2010 23:23:27) [27]
>
> Ты не читай мне лекцию, что такое XOR ты ближе к телу.
вот опять вы возмущаетесь. Опять не хотите признавать очевидное.
Если человек использует союз "или" в жизни, то он будет XOR по свойству, а не OR.
Условие:
АП или ИШ .
Или тот или тот. Но не как не оба. Понимаете? это xor .
← →
xayam © (2010-01-31 23:34) [32]Удалено модератором
← →
test © (2010-01-31 23:36) [33]Ничто не предвещало беды ))
← →
Anatoly Podgoretsky © (2010-01-31 23:45) [34]Простейшия проверка показала резкий выигрыш "CMP" при сравнение на 2 миллиардах иттераций. XOR в три раза медленнее.
procedure TForm1.Button1Click(Sender: TObject);
var
a: Integer;
i:Integer;
b: boolean;
t:Integer;
c: boolean;
begin
a:=1;
b:=true;
t:=gettickcount;
for I := 0 to 2000000000 - 1 do
c := (a>1) xor b;
ShowMessage(Inttostr(GetTickCount-t)); // 2543
if c then Label1.Caption := "true" else Label1.Caption := "false";
t:=gettickcount;
for I := 0 to 2000000000 - 1 do
c := (a>1) <> b;
ShowMessage(Inttostr(GetTickCount-t)); //843
end;
← →
test © (2010-01-31 23:48) [35]Anatoly Podgoretsky © (31.01.10 23:45) [34]
Зато авто обфускация кода при использование xor и зубодробильных выражений на порядок выше!
← →
Юрий Зотов © (2010-01-31 23:50) [36]Когда я вижу, что XOR дает ниболее простую конструкцию, то без тени сомнения XOR и применяю. Правда, за всю многолетнюю практику такое случалось всего лишь несколько раз, но если уж встретилось - то без тени сомнения.
И тоже считаю, что:
- xor ничем не хуже других логических операций;
- программист операции с xor понимать обязан.
← →
Anatoly Podgoretsky © (2010-01-31 23:50) [37]Ты обсуждаем вполне реальный код и утверждения, которые не подтвердились, по крайней мере на моем процессоре. Ассемблерный код почти одинаковый CMP/XOR
← →
Кто б сомневался © (2010-02-01 00:13) [38]
> Простейшия проверка показала резкий выигрыш "CMP" при сравнение
> на 2 миллиардах иттераций. XOR в три раза медленнее.
ну да, только там еще был запущен SR и плюс Макафи и куча остальных прог. И плюс винда со своей поточной каруселью.
Насколько я помню, cmp выполняется за 3 такта, xor за 2 или за один. Вот только книжку не могу найти.
Обычно в книгах по асму в конце пишут за сколько тактов выполняется команда на x86 - у кого есть посмотрите.
← →
Игорь Шевченко © (2010-02-01 00:18) [39]Юрий Зотов © (31.01.10 23:50) [36]
> И тоже считаю, что:
> - xor ничем не хуже других логических операций;
> - программист операции с xor понимать обязан.
прокомментируй высказывание оратора в [8], "круче выглядит".
Заодно можно прокомментировать следующие части кода:var
Literal: Boolean;
....
if IsLiteral then
begin
Literal := Literal xor True;
....
end;
...
else if IsLiteral then Literal := Literal xor True;while (P^ <> #0) and not (Negate xor (UpCase(P^) in CharSet^)) do Inc(P);
← →
xayam © (2010-02-01 00:18) [40]
> Anatoly Podgoretsky © (31.01.10 23:45) [34]
xor - 6984
cmp - 2468
← →
Кто б сомневался © (2010-02-01 00:20) [41]
> Простейшия проверка показала резкий выигрыш "CMP" при сравнение
> на 2 миллиардах иттераций. XOR в три раза медленнее.
О. Я понял почему.
Оптимизатор то молодец.. :)
Вот это ваш cmp код:
//for I := 0 to 5 - 1 do
mov eax,$00000005
dec eax
jnz $0046cd2c
А вот это ваш xor код :
// for I := 0 to 5 - 1 do
mov eax,$00000005
// c := (a>1) xor b;
cmp esi,$01
setnle dl
xor dl,bl
mov [ebp-$05],dl
// for I := 0 to 5 - 1 do
dec eax
jnz $0046ccc9
← →
Игорь Шевченко © (2010-02-01 00:21) [42]
> Обычно в книгах по асму в конце пишут за сколько тактов
> выполняется команда на x86 - у кого есть посмотрите.
У меня есть. За 1 такт. Но это на старых процессорах, у меня книжка по 486-у.
На более современных о времени выполнения в тактах говорить бессмысленно.
← →
Кто б сомневался © (2010-02-01 00:21) [43]Вот поэтому он быстрее, т.к. на константах делать не надо.
← →
Anatoly Podgoretsky © (2010-02-01 00:22) [44]> Кто б сомневался (01.02.2010 00:13:38) [38]
И заметь вся эта карусель не отключалась и при проверке на CMP, точно также как и для XOR
Не знаю, кто такой SR, но влияние McAfee как и любого антивируса 0, оно может и тормозит при запуске, но никак не мешает уже при прогоне.
Касательно книжек, ты их выбрось, они не имеют смысла после 386/486. Аналогично и для ADD и INC по книжкам INC круче, а на практике наоборот.
Короче ты слил, доказательства не стал приводить, отделался головословными утверждениями.
← →
xayam © (2010-02-01 00:23) [45]Удалено модератором
← →
Anatoly Podgoretsky © (2010-02-01 00:26) [46]> xayam (01.02.2010 00:18:40) [40]
Другой процессор, но все равно XOR проигрывает. Я думаю если найти 486 процессор, может хотя бы там он покажет свою СИЛУ.
Нравятся мне эти знатоки ассеблера, которые оперируют данными начала 80 годов. В итоге у них код на ассеблере получается медленнее эквивалента на Паскале.
← →
Anatoly Podgoretsky © (2010-02-01 00:28) [47]> Кто б сомневался (01.02.2010 00:20:41) [41]
Так ты еще и асм код читать не умеешь, да CMP выдаешь обработку цикла FOR
← →
Anatoly Podgoretsky © (2010-02-01 00:29) [48]> Игорь Шевченко (01.02.2010 00:21:42) [42]
Не помню какой именно вариант Пентиума выполнял 5!!! команд за так, когда без пенальти. Core 2 хуже
← →
xayam © (2010-02-01 00:29) [49]
> Anatoly Podgoretsky © (01.02.10 00:26) [46]
> > xayam (01.02.2010 00:18:40) [40]
> Другой процессор, но все равно XOR проигрывает.
я тут вспомнил, что у меня распределенные вычисления считают, отключил
xor - 3766
cmp - 1375
все равно проигрывает
← →
Anatoly Podgoretsky © (2010-02-01 00:30) [50]> xayam (01.02.2010 00:23:45) [45]
Конечно, даже подлоги использует, видимо специально.
← →
Кто б сомневался © (2010-02-01 00:33) [51]
> Anatoly Podgoretsky © (01.02.10 00:28) [47]
>
> > Кто б сомневался (01.02.2010 00:20:41) [41]
>
> Так ты еще и асм код читать не умеешь, да CMP выдаешь обработку
> цикла FOR
Да неужели?
А может cmp это A>1?
У вас компилятор оптимизировал константы. весь ваш код
for I := 0 to 2000000000 - 1 do
c := (a>1) <> b;
Он превратил в
//for I := 0 to 5 - 1 do
mov eax,$00000005
dec eax
jnz $0046cd2c
← →
KilkennyCat © (2010-02-01 00:33) [52]Я, наверное, тупой программист, но я так и не понял, чем в изначальной задаче применение xor вызвало негативную реакцию (приведенные впоследствии примеры считаю несущественными, ибо есть орешник - там тоже всякого хватает).
Остается только спросить, если бы слово "круче" не прозвучало, реакция была бы такая же?
← →
Игорь Шевченко © (2010-02-01 00:41) [53]KilkennyCat © (01.02.10 00:33) [52]
> но я так и не понял, чем в изначальной задаче применение
> xor вызвало негативную реакцию
Въезжать дольше.
← →
Кто б сомневался © (2010-02-01 00:42) [54]Короче вот правильный код, АП ошибся.
procedure TForm1.Button1Click(Sender: TObject);
var
a: boolean;
i:Integer;
b: boolean;
t:Integer;
c: boolean;
begin
{$O-}
a:= false;
b:=true;
t:=gettickcount;
for I := 0 to 2000000000 - 1 do
c := a xor b;
ShowMessage(Inttostr(GetTickCount-t));
if c then Caption := "true" else Caption := "false";
t:=gettickcount;
for I := 0 to 2000000000 - 1 do
c := a <> b;
ShowMessage(Inttostr(GetTickCount-t));
end;
← →
Кто б сомневался © (2010-02-01 00:43) [55]
> АП ошибся.
см. 51. сработал оптимизатор на константах.
← →
KilkennyCat © (2010-02-01 00:44) [56]
> Игорь Шевченко © (01.02.10 00:41) [53]
Нечитабельно?
Но кому-то другому, а не написавшему. 99% моих исходников никто не увидит, потому что нафиг никому не нужно, и что, мне мучаться и писать удобно да еще с комментариями?
← →
Кто б сомневался © (2010-02-01 00:44) [57]который удалил код сравнения ( c := a <> b) . Т.е. не на константах, а на С, которая нигде не использовалась дальше.
← →
xayam © (2010-02-01 00:46) [58]
> Кто б сомневался © (01.02.10 00:42) [54]
xor - 5547
cmp - 7375
← →
Кто б сомневался © (2010-02-01 00:47) [59]
> Игорь Шевченко © (01.02.10 00:41) [53]
>
> KilkennyCat © (01.02.10 00:33) [52]
>
>
> > но я так и не понял, чем в изначальной задаче применение
>
> > xor вызвало негативную реакцию
>
>
> Въезжать дольше.
Зачем вы всех равняете по себе. Ведь в A or B не долго въезжать?
Почему тогда A xor B дольше?
Я к примеру сразу "въезжаю", собственно посмотрев на конструкцию if a <> b - сразу предложил вариант.
← →
Игорь Шевченко © (2010-02-01 00:51) [60]KilkennyCat © (01.02.10 00:44) [56]
Читабельно. Въезжать дольше.
Есть один тонкий момент - со своим кодом каждый программист волен делать, что угодно и никто ему (тем более на delphimaster) не указ. Но когда начинается работа в команде с кодом, обладающем длительным жизненным циклом, тратить время на разбор высеров гениальности не хочется. Поэтому от подобных любителей крутизны стараются избавиться. Чаще всего, увольнением.
Кстати, код, который я привел в [39] - это из VCL. Первый кусок из AdoDB.pas и DB.pas, второй из Classes.pas
← →
KilkennyCat © (2010-02-01 00:58) [61]
> Игорь Шевченко © (01.02.10 00:51) [60]
Ну не знаю. Неоднократно замечал, что вылизанный и оптимизированный код более труден к въезжанию.
Возьмем уж индусский стиль обходиться без циклов или нормальный, их вариант более въезжателен, и циклов знать не надо, и риск в бесконечный уйти нету.
← →
Кто б сомневался © (2010-02-01 01:03) [62]
> Поэтому от подобных любителей крутизны стараются избавиться.
> Чаще всего, увольнением.
Все, ты уволен! Над этой твоей конструкцией "a xor b" наши программисты чуть не сломали свои бедные головушки.. :)
← →
KilkennyCat © (2010-02-01 01:13) [63]
> Кто б сомневался © (01.02.10 01:03) [62]
Зря смеешься, кто-то когда-то рассказывал, как тупому программисту в штатах обеспечили супер-пупер условия работы на курорте, лишь бы домучал свою тупейшую часть работы, в то время, когда нормальные трудились в обычном офисе. Я думаю, в конечном итоге он стал начальником.
← →
Кто б сомневался © (2010-02-01 01:20) [64]
> else if IsLiteral then Literal := Literal xor True;
Здесь это конечно не в тему.
Т.к. быстрее и круче будет написать
else if IsLiteral then
Literal := not Literal;
Но таких случаев исключительных можно с любым оператором придумать.
А в сабже топика я выбрал бы именно xor - т.к. до меня эта конструкция доходит по скорости понимания так же как и <>.
Здесь все зависит от того как часто вы работаете с битовой логикой, ваш случай ИШ говорит что вы просто подзабыли немного ее да и все - поэтому вам нужно вспоминать и прокручивать это в голове при чтении кода.
И конечно же по такому поводу никто увольнять не будет, да и выговаривать тоже.
← →
xayam © (2010-02-01 01:24) [65]Удалено модератором
← →
Аноним © (2010-02-01 01:24) [66]что ж сделают со мной.. я все больше на лиспе пишу
жуть
← →
xayam © (2010-02-01 01:27) [67]
> Аноним © (01.02.10 01:24) [66]
> что ж сделают со мной.. я все больше на лиспе пишу
> жуть
а меня тут пролог заинтересовал, интересный язык
← →
KilkennyCat © (2010-02-01 01:29) [68]Вас не уволят, вас просто не возьмут на работу. А если и возьмут, то уволят через суд, будете еще должны предприятию за моральный ущерб аморальным программированием причиненный.
← →
Аноним © (2010-02-01 01:32) [69]
> за моральный ущерб аморальным программированием причиненный.
дык, это моя цель :-)
← →
Германн © (2010-02-01 01:39) [70]
> KilkennyCat © (01.02.10 01:29) [68]
>
> Вас не уволят, вас просто не возьмут на работу.
Возьмут. Не ври. Если приемом на работу заведует грамотный специалист. За исключением приема на "работу в команду".
Хотя, конечно, инструкция XOR выглядит "чужеродной" в данной конструкции.
← →
KilkennyCat © (2010-02-01 01:45) [71]да каким же местом она все-таки чужеродна?!
Почему or, not, and не чужеродны?
И Германн, тебе, с электроникой возящемуся, она ваще должна быть своя в доску.
← →
Кто б сомневался © (2010-02-01 02:00) [72]
> KilkennyCat © (01.02.10 01:45) [71]
+1 я тоже не пойму. or, and, not, не чужеродны, - все чет пишут, а xor чужеродный, хотя из одной бочки. Что за дискриминация XOR?
← →
Германн © (2010-02-01 02:04) [73]
> KilkennyCat © (01.02.10 01:45) [71]
>
> да каким же местом она все-таки чужеродна?!
> Почему or, not, and не чужеродны?
> И Германн, тебе, с электроникой возящемуся, она ваще должна
> быть своя в доску.
>
Мне, как раз, она "своя в доску"!
А вот другим!
XOR работает с битами. С конкретными битами!
В Windows "прозрачно" реализована работа с битовыми масками. И там "or, not, and" вполне понятны. Но ведь там по сути есть работа с байтами!
← →
Игорь Шевченко © (2010-02-01 02:14) [74]KilkennyCat © (01.02.10 01:45) [71]
> да каким же местом она все-таки чужеродна?!
Побитовая - не чужеродна. В условном выражении чужеродна.
Мастурбация^^^^^^^^^^^Гимнастика для ума начинается, когда xor используется более одного раза в выражении. С and и or все понятно быстрее, до первого нуля или единицы.
← →
Германн © (2010-02-01 02:21) [75]
> В условном выражении чужеродна.
Тоже криво сказано.
← →
vuk © (2010-02-01 02:36) [76]to Германн © (01.02.10 02:04) [73]:
> XOR работает с битами. С конкретными битами!
XOR - это такая же булева функция, как AND или OR. И в Delphi работает она в зависимости от применения. Если операнды целые, то побитово, если boolean, то как логическая.
Другое дело, что применение XOR в условных выражениях не всегда прозрачно и требует при чтении кода вспоминать, как выглядит таблица истинности для этой функции.
← →
Германн © (2010-02-01 02:47) [77]
> vuk © (01.02.10 02:36) [76]
>
> to Германн © (01.02.10 02:04) [73]:
>
> > XOR работает с битами. С конкретными битами!
>
>
> XOR - это такая же булева функция, как AND или OR. И в Delphi
> работает она в зависимости от применения. Если операнды
> целые, то побитово, если boolean, то как логическая.
>
А то я это первый раз слышу.
← →
vuk © (2010-02-01 02:51) [78]to Германн © (01.02.10 02:47) [77]
> А то я это первый раз слышу.
Ну и зачем тогда писать, что XOR работает с конкретными битами?
← →
Германн © (2010-02-01 02:57) [79]
> vuk © (01.02.10 02:51) [78]
>
> to Германн © (01.02.10 02:47) [77]
>
>
> > А то я это первый раз слышу.
>
> Ну и зачем тогда писать, что XOR работает с конкретными
> битами?
>
Хм.
А ты можешь представить реально нужный пример кода в Windows, когда нужно применять XOR?
← →
Германн © (2010-02-01 03:15) [80]
> А ты можешь представить реально нужный пример кода в Windows,
> когда нужно применять XOR?
>
Вот and, or или not - это понятно.
← →
Юрий Зотов © (2010-02-01 05:10) [81]> Германн © (01.02.10 03:15) [80]
> А ты можешь представить реально нужный пример кода в Windows,
> когда нужно применять XOR?
Хм... а при чем тут Windows?
← →
Думкин © (2010-02-01 07:49) [82]Странный спор, притом что правильного решения альтернативного заданной конструкции так и не приведено.
← →
KilkennyCat © (2010-02-01 08:34) [83]Ну вот, пришел Думкин и 80 постов испортил :)
← →
Ega23 © (2010-02-01 11:46) [84]
> А ты можешь представить реально нужный пример кода в Windows,
> когда нужно применять XOR?
>
Значение регистра обнулить? Заксорить самого на себя...
← →
Alx2 © (2010-02-01 12:01) [85]В случае с xor у меня по удобочитаемости идет такой порядок:
1. if a<>b then ...
2. if a xor b then ...
....
1000. if (a and not b) or ((not a) and b) then...
2000. if ((not a) or (not b)) and (a or b) then...
← →
TUser © (2010-02-01 12:15) [86]XOR отличиается от других логических операций уже тем, что для него нет слова в русском (английском) языке. И, ИЛИ и НЕ мы в разговорной речи употребляем. ИСКЛЮЧАЮЩЕЕ_ИЛИ - ни разу не слышал.
Это показывает, что XOR гораздо реже употребляется человеками. То есть он человекам менее понятен, чем три другие операции. А стало быть из двух операций
A <> B
и
A xor B
первая понимается проще.
Конечно, программист обязан понимать и вторую операцию. Но он также обязан понимать и слово "не равно", разве нет? И он обязан писать так, чтобы не запутывать читающего, а способствовать его пониманию. Поэтому из двух этих конструкций первая - хорошая, а вторая - плохая. Имхо, конечно.
← →
KilkennyCat © (2010-02-01 12:25) [87]
> Это показывает, что XOR гораздо реже употребляется человеками.
Ну, если электронщиков не считать человеками, то тогда да.
← →
TUser © (2010-02-01 12:39) [88]Если их считать человеками, то все равно - на истинность утверждения "XOR гораздо реже употребляется человеками" применительно ко всему человечеству они не повлияют. Мало их.
← →
Ega23 © (2010-02-01 12:55) [89]ИМХО.
Вообще не дело логические операторы и битовые одинаково именовать. Это не для конкретного языка, это "вообще".
В этом плане мне разделение в TSQL нравится. С его побитовыми &, ~, | и ^
← →
Anatoly Podgoretsky © (2010-02-01 13:01) [90]> KilkennyCat (01.02.2010 12:25:27) [87]
электронщиков не считать человеками, без всяких если.
← →
Anatoly Podgoretsky © (2010-02-01 13:04) [91]> Ega23 (01.02.2010 12:55:29) [89]
Это тлетворное влияние СИ
← →
Вариант (2010-02-01 14:55) [92]
> Ega23 © (01.02.10 12:55) [89]
> ИМХО.
> Вообще не дело логические операторы и битовые одинаково
> именовать.
Согласен
← →
Кто б сомневался © (2010-02-01 15:08) [93]
> TUser © (01.02.10 12:15) [86]
Я уже писал что человек если произносит союз "или" - подразумевает свойство XOR. Иначе надо было говорить "или\и" - а мы так не говорим.
Получается xor ("или") обычно используется повсеместно в чел. жизни.
Or (или\и) никогда - по крайнем мере в русском и англ. языке.
← →
Кто б сомневался © (2010-02-01 15:12) [94]
> A <> B
>
> и
>
> A xor B
>
> первая понимается проще.
Опять же проще для тебя. Для меня они одинаково просто доходят, т.к. в свое время я часто с битовой логикой работал.
В твое случае ты чаще работаешь с <> чем с xor поэтому и доходит быстрее первое. На деле до программиста знающего как работает XOR но не работающего с ним - не трудно припомнить свойство - всего 3 секунды.
← →
Ega23 © (2010-02-01 15:22) [95]
A <> B
иA xor B
var
A, B : real;
← →
Кто б сомневался © (2010-02-01 15:24) [96]
> Ega23 © (01.02.10 15:22) [95]
Мы про boolean говорим - здесь ничего не надо вычислять.
← →
xayam © (2010-02-01 15:33) [97]Удалено модератором
← →
Кто б сомневался © (2010-02-01 15:41) [98]
> xayam © (01.02.10 15:33) [97]
Нет, не поняли. Я имел ввиду в целом людей которые не часто работают с xor, но знают как он работает. Отправлял вчера эту конструкцию знакомому, сказал как поймешь сразу скажи как она работает (по скайпу). Он тоже программист (C#) - с xor работает не часто.
if a xor b then
Он ответил через 3 секунды. Просто знал присказку "или там или там, но не оба". :)
← →
xayam © (2010-02-01 15:47) [99]Удалено модератором
← →
Ega23 © (2010-02-01 15:49) [100]
> Мы про boolean говорим - здесь ничего не надо вычислять.
Вот в том-то и дело. В случае Boolean - логическая. В случае числа - побитовая.
А если вспомнить, что false = 0, а true <> 0, то вообще всё весело.
← →
KilkennyCat © (2010-02-01 15:56) [101]var
A, B : boolean;
A <> B выглядит идиотски, так же, как if A <> true
← →
Кто б сомневался © (2010-02-01 16:14) [102]
> А если вспомнить, что false = 0, а true <> 0, то вообще
> всё весело.
в boolean true = 1 всегда вы ж знаете. Это не bytebool и не bool.
Вообще A+B*C - здесь больше усилий нужно, чем A xor B.
если бы детей в школе учили xor на равне с операциями + - то не было бы и таких удивлений и спора. Просто бы шло на автомате. А человеку который пишет код, имхо вообще спорить по этому поводу глупо.
← →
Alx2 © (2010-02-01 16:27) [103]>KilkennyCat © (01.02.10 15:56) [101]
> A <> B выглядит идиотски, так же, как if A <> true
Передерну в другую сторону: для завершенности картинки, нужно юзать только Штрих Шеффера. Чтобы одна функция на все-про все, и до оторопи понятно без въездов в контекст. :)
Но ведь есть локальные документы-соглашения о стиле кодирования в конкретных конторах и проектах. Лепят по ним. Чего зря спорить?
← →
xayam © (2010-02-01 16:32) [104]Удалено модератором
← →
Думкин © (2010-02-01 16:53) [105]По заданорй задаче 3 исхода. В один зинелфс там не получится.
Это бы в свич - для высокого языка. Это красивее. А каждый внутренний заход в кэйсе - в языкопонятную функцию.
← →
Ega23 © (2010-02-01 16:53) [106]
> в boolean true = 1 всегда вы ж знаете. Это не bytebool и
> не bool.
нету в Boolean ни 0, ни 1, ничего другого. Есть true и есть false.
0, 1 и другие значения - это уже не Boolean.
Вот Ord(True) - да, всегда единица.
← →
Думкин © (2010-02-01 16:57) [107]
> По заданорй задаче 3 исхода.
Извините.
> По заданой задаче 3 исхода.
так.
← →
Кто б сомневался © (2010-02-01 17:13) [108]
> Ega23 © (01.02.10 15:49) [100]
> А если вспомнить, что false = 0, а true <> 0, то вообще
> всё весело.
> Ega23 © (01.02.10 16:53) [106]
> нету в Boolean ни 0, ни 1, ничего другого. Есть true и есть
> false.
> 0, 1 и другие значения - это уже не Boolean.
Сам же написал. И сам же отрицаешь.. :)
Есть в boolean и ноль и один. Просто интерпретация его как 0 - false 1 - true.
неважно как называется, можно назвать как черное и белое или как да и нет или как 0 и 1 - суть одна.
Ну а если строго на язык смотреть, тогда да, true и false. Но тогда это касается всех - и bool и bytebool и longbool итд.
← →
Кто б сомневался © (2010-02-01 17:15) [109]
> Ну а если строго на язык смотреть, тогда да, true и false.
А вообще нет, если строго смотреть ,тогда как раз есть ноль и один. Просто для удобства назвали его false и true. Двоичная система.
← →
tesseract © (2010-02-01 17:22) [110]
> А вообще нет, если строго смотреть ,тогда как раз есть ноль
> и один.
C COM работал? Там всё глубоко наоборот.
← →
Думкин © (2010-02-01 17:45) [111]
> tesseract © (01.02.10 17:22) [110]
>
> > А вообще нет, если строго смотреть ,тогда как раз есть
> ноль
> > и один.
>
>
> C COM работал? Там всё глубоко наоборот.
Вот поэтому и не надо.
Если можно написать по русску, что две прямые пересекаются в одной точке, а вдве точки в одной прямой и еще чутка. То не стоит выносить мозг Гильбертом.
Писать надо понятно. А скорость придумывания терминов оставим философам.
← →
Jeer © (2010-02-01 18:19) [112]
> То не стоит выносить мозг Гильбертом.
Это - да.
← →
Юрий Зотов © (2010-02-01 22:55) [113]> TUser © (01.02.10 12:15) [86]
Обоснование глыбоконаучное, спору нет.
Но как насчет "либо-либо"?
:o)
← →
Ega23 © (2010-02-02 00:31) [114]
> Сам же написал. И сам же отрицаешь.. :)
Ты опу с пальцем путаешь.
Что будет:if Boolean(2) then
ShowMessage("True")
else
ShowMessage("False")
?
← →
Не занят (2010-02-02 02:25) [115]
> if Boolean(2)
Правда всегда одна, путей к ней много
← →
Lamer@fools.ua © (2010-02-02 10:21) [116]Поддержу xor. Не вижу в данном примере ничего криминального.
За один несчастный xor так наброситься на человека...
Лучше здесь перлы почитайте: http://govnokod.ru/
В частности, http://govnokod.ru/delphi
← →
GrayFace © (2010-02-02 12:09) [117]У меня результаты xor и <> полностью совпадают. В отличие от [34], замеры делал раздельно, на разных кнопках, иначе не достоверно.
Германн © (01.02.10 2:57) [79]
А ты можешь представить реально нужный пример кода в Windows, когда нужно применять XOR?
Реальный пример в голову не лезет, но
A xor B xor C
Если переводить на <>, то появятся скобки.
Гепотетический пример:
map[x, y, z]:= (x mod 2 = 0) xor (y mod 2 = 0) xor (z mod 2 = 0);
- заполнение каждой второй ячейки true.
← →
GrayFace © (2010-02-02 12:10) [118]по типу шахматной доски.
← →
12 © (2010-02-02 12:16) [119]$ifdef оффтоп
вот так еще прикольно получится
const
false = true;
true = false;
begin
if (1>0) = false then showmessage("(1>0) = false");
if (1>0) = true then showmessage("(1>0) = true");
а потом
const
true = false;
false = true;
begin
if (1>0) = false then showmessage("(1>0) = false");
if (1>0) = true then showmessage("(1>0) = true");
← →
Ega23 © (2010-02-02 12:22) [120]
> map[x, y, z]:= (x mod 2 = 0) xor (y mod 2 = 0) xor (z mod 2 = 0);
> - заполнение каждой второй ячейки true.
А в один проход разве не судьба?
← →
GrayFace © (2010-02-02 16:13) [121]Т.е. если гипотетический "map" представляется 1D массивом? Все-равно нет - надо как в шахматной доске. Например, если размерность по x нечетная, то в конце одной строки и в начале следующей будут false (2 подряд в 1D представлении).
← →
Ega23 © (2010-02-02 16:24) [122]
> Т.е. если гипотетический "map" представляется 1D массивом?
> Все-равно нет - надо как в шахматной доске. Например, если
> размерность по x нечетная, то в конце одной строки и в начале
> следующей будут false (2 подряд в 1D представлении).
А зачем на каждой итерации (y mod 2 = 0) xor (z mod 2 = 0) вычислять?
Вообще, крайне неоптимально.
← →
Кто б сомневался © (2010-02-02 20:04) [123]
> У меня результаты xor и <> полностью совпадают.
На один проц поставь программу. У тебя больше одного процессора. Я когда ставлю на один проц результаты разные, на два - одинаковые.
← →
jack128_ (2010-02-02 23:28) [124]
> A xor B xor C
> Если переводить на <>, то появятся скобки.
почему?? a <> b <> с не компилится??
← →
Jeer © (2010-02-02 23:42) [125]
> почему?? a <> b <> с не компилится??
>
Потому, что "Быть или не быть" ( аналог ) - тоже не "компилится".
← →
GrayFace © (2010-02-04 11:59) [126]Ega23 © (02.02.10 16:24) [122]
А зачем на каждой итерации (y mod 2 = 0) xor (z mod 2 = 0) вычислять?
Вообще, крайне неоптимально.
Это да, конечно.
Кто б сомневался © (02.02.10 20:04) [123]
На один проц поставь программу. У тебя больше одного процессора. Я когда ставлю на один проц результаты разные, на два - одинаковые.
Как это? Поток в любом случае один...
jack128_ (02.02.10 23:28) [124]
почему?? a <> b <> с не компилится??
Хм, точно. Хотя среда красным подчеркивает. Но, все-равно, без скобок это точно будет с трудом понимаемый код, а 3 xor"а подряд - достаточно понятно.
← →
GrayFace © (2010-02-04 11:59) [127]> Хм, точно.
В смысле, действительно, компилится.
Страницы: 1 2 3 4 вся ветка
Форум: "Прочее";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Память: 0.79 MB
Время: 0.07 c