none
请问一下关于移位运算符!! RRS feed

  • 问题

  • cout << "Thank you. The remainder after dividing your number by 8 is " 
    << number - ((number >> 3) << 3);

    这样的一个输出语句 number是一个整形变量
    number是一个随便的数字接受cin输入后就在输出语句里进行运算 但是怎么里面的移位运算符不是>>=   <<=这样写 反而是这样<< >>写的? 如果变量number的值是8 那么计算出来的结果是多少? 这个是怎么计算的? 请兄弟们能不能详细的解释解释 小弟我理解能力不算好! 呵呵 望能体谅

    一个出息的程序员-》疯狂的程序员
    2009年6月4日 14:08

答案


  • ((number >> 3) << 3)
    这里>>是双目运算符
    是对number>>3返回的结果再执行<<3
    而>>=是单目运算符
    类似于+ 和+=;

    麻烦把正确答案设为解答。
    2009年6月5日 3:13
    版主

全部回复

  • 最简单的理解方法,左移一位就是乘2,右移一位就是除2

    8右移三位就是8/2/2/2 = 1, 再左移三位就是1*2*2*2 = 8


    baadfood?cafebabe?
    2009年6月4日 14:56
    版主

  • ((number >> 3) << 3)
    这里>>是双目运算符
    是对number>>3返回的结果再执行<<3
    而>>=是单目运算符
    类似于+ 和+=;

    麻烦把正确答案设为解答。
    2009年6月5日 3:13
    版主
  • 我有点理解了! 是不是 右移三位就除以4然后不要余数!然后求的的商 再左移三位就是乘以这个商的三次方 是不是这样? 就是死公式 右移除以4 左移乘以左移的这个次方 是吗?


    一个出息的程序员-》疯狂的程序员
    2009年6月5日 4:11
  • 不是,是Vonger说的,右移一位除以2,左移一位乘以2
    麻烦把正确答案设为解答。
    2009年6月5日 4:22
    版主
  • 关于详细的表达式你能给我写一下吗? 谢谢了 就是计算过程


    一个出息的程序员-》疯狂的程序员
    2009年6月5日 6:45
  • number - ((number >> 3) << 3) ->
    mumber.operator-( (mumber.operator>>(3)).operator<<(3))

    麻烦把正确答案设为解答。
    2009年6月5日 7:05
    版主