[C++] Оператор <<

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by edge911, 18 Jan 2011.

  1. edge911

    edge911 Active Member

    Joined:
    21 Feb 2009
    Messages:
    105
    Likes Received:
    142
    Reputations:
    15
    С++
    ------
    int t;
    int depth = 100;

    t = (1 << (depth - 1));

    что делает в данном случае оператор <<
    объясните, или ссылочку где почитать мона про ета
    оч срочно!
     
    #1 edge911, 18 Jan 2011
    Last edited: 18 Jan 2011
  2. Lee_fx

    Lee_fx Elder - Старейшина

    Joined:
    27 Sep 2008
    Messages:
    90
    Likes Received:
    14
    Reputations:
    0
    циклические сдвиг влево
    т.е.
    int a;
    // в двоичном коде 1 это 00000...0001
    a = 1 << 2; //двигаем все биты, 32, влево на 2 позиции, в итоге 00000...0100
     
    2 people like this.
  3. edge911

    edge911 Active Member

    Joined:
    21 Feb 2009
    Messages:
    105
    Likes Received:
    142
    Reputations:
    15
    пасиб большое, тему delete еси мона
     
  4. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    2 Lee_fx а с чего ты взял что это циклический сдвиг? Это обычный сдвиг а не циклический.
     
  5. Lee_fx

    Lee_fx Elder - Старейшина

    Joined:
    27 Sep 2008
    Messages:
    90
    Likes Received:
    14
    Reputations:
    0
    перед постом отправил предложенный в первом посте пример компилятору, ожидал увидеть ноль, но увидел 8, отсюда и сделал вывод)
     
  6. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    А вот это уже глюки компилятора. вернее фичи. Всё что больше максимума, то юзается по модулю. Если int - 32 бита, значит и здвиг тоже 32 бита максимум,а так как остаток от деления 99 на 32 = 3 то выходит что 1 << 3 = 8 вот тебе и результат. для проверки можешь точно проверить на таких значениях как 0x80000001 = 10.....01
    после сдвига на 1 ты не получишь 11 а получишь 10
     
  7. Lee_fx

    Lee_fx Elder - Старейшина

    Joined:
    27 Sep 2008
    Messages:
    90
    Likes Received:
    14
    Reputations:
    0
    гм, и правда, недоглядел, или недоэксперементировал)
    а с модулем интересно, не знал.
     
  8. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    НО это фича не компилятора даже, а инструкций x32 именно там происходит вся эта фишка (т.е. на уровне процессора)