bitwise OR

Тема в разделе "LANGS.C", создана пользователем IceBars, 27 авг 2007.

  1. IceBars

    IceBars New Member

    Публикаций:
    0
    Регистрация:
    16 янв 2007
    Сообщения:
    384
    Адрес:
    Матрица
    Код (Text):
    1. #include <iostream>
    2. int main()
    3. {
    4.     int style;
    5.     int vredraw = 0x01;
    6.     int hredraw = 0x02;
    7. style = hredraw > vredraw;
    8. std::cout << style;
    9. return 0;
    10. }
    почему выдается 1 а не 3? :dntknw:
     
  2. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
  3. BreakPointMAN

    BreakPointMAN New Member

    Публикаций:
    0
    Регистрация:
    26 июн 2005
    Сообщения:
    42
    Адрес:
    Russia
    А почему должно выдаваться 3?..
     
  4. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    1 выдаётся потому, что hredraw > vredraw.
     
  5. xh4ck

    xh4ck New Member

    Публикаций:
    0
    Регистрация:
    6 мар 2005
    Сообщения:
    60
    Адрес:
    Russia
    а "<<" это тогда XOR наверное :-D
     
  6. Ultrin Faern

    Ultrin Faern New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2006
    Сообщения:
    170
    В языке Си "упрощенная" типизация данных...
    В данном случае - результат булевого выражения "ИСТИНА" переведен в целочисленное - единица. В паскале\делфи за такие "изыски" компилятор посылает очень далеко :)
     
  7. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Нет, просто там есть неявные преобразования: булевый тип (которого фактически нет в сях, только в С++) в целочисленный, массив - в указатель на первый элемент, функция - в указатель на неё и т.п.
     
  8. IceBars

    IceBars New Member

    Публикаций:
    0
    Регистрация:
    16 янв 2007
    Сообщения:
    384
    Адрес:
    Матрица
    Код (Text):
    1. mov eax,1
    2. mov ebx,2
    3. or    eax,ebx
    Здеся 3, а там не 3 :dntknw:
     
  9. Ultrin Faern

    Ultrin Faern New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2006
    Сообщения:
    170
    А кто Вам сказал что знак ">" (больше) переводится компилятором в команду "OR" (логическое или)
    Если уж на то пошло, то ассемблерный код будет выглядеть так
    Код (Text):
    1. mov eax,1
    2. mov ebx,2
    3. cmp eax, ebx
    4. setg eax
    PS - Не будем раздувать "священные" войны. К языкам с "жесткой типизацией" С и С++ не относятся - почитайте литературу.
     
  10. IceBars

    IceBars New Member

    Публикаций:
    0
    Регистрация:
    16 янв 2007
    Сообщения:
    384
    Адрес:
    Матрица
    Вот этот дядька: Ivor Horton со своей книгой.

    To use in setting the rightmost bit, you can define:
    For use in setting the second-to-rightmost bit, you could define the variable hredraw as:
    So you could set the rightmost two bits in the variable style to 1 with the statement:
     
  11. Ultrin Faern

    Ultrin Faern New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2006
    Сообщения:
    170
    У дядьки опечатка :))))

    Должно быть:
    Код (Text):
    1. style = hredraw | vredraw;
    И вообще, если он ТАКИМ образом объясняет побитовые операции - единственное резюме этой книги - "Ф ТОПКУ ЕЕ"! :)))
     
  12. IceBars

    IceBars New Member

    Публикаций:
    0
    Регистрация:
    16 янв 2007
    Сообщения:
    384
    Адрес:
    Матрица
    А всё врубился. :)
    У Horton'а наверно кнопка вылетела поэтому он другой символ вфиндюрил
    censored, Ultrin Faern спасибо за быстрый ответ.
    ДЯДЬКУ Ф ТОПКУ