Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
15-1272463188
Раиса
2010-04-28 17:59
2010.08.27
Биноминальные коэффициенты - не понимаю


3-1238243754
Ivan8511
2009-03-28 15:35
2010.08.27
Индексация даты в обратном порядке


2-1270733493
Виктор
2010-04-08 17:31
2010.08.27
DBGrid и DBEdit


15-1263936627
Юрий
2010-01-20 00:30
2010.08.27
С днем рождения ! 20 января 2010 среда


2-1274259171
Nathan
2010-05-19 12:52
2010.08.27
Работа с файлами





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский