日期:2014-05-18  浏览次数:20727 次

前辈们关于移位运算。。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace p4_5
{
  class Program
  {
  static void Main(string[] args)
  {
  MoveBit(16, 1);
  MoveBit(16, 3);
  MoveBit(16, 5);
  MoveBit(16, 7);
  }
  static void MoveBit(int x,int n)
  {
  Console.Write("{0}<<{1}={2} ", x, n, x << n);
  Console.Write("{0}>>{1}={2}", x, n, x >> n);
  Console.Write("{0}<<{1}={2}", -x, n, -x << n);
  Console.WriteLine("{0}>>{1}={2}", -x, n, -x >> n);


   

  }
  }
}

这个运行结果为什么会出现0和-1呢,我实在想不明白啊。。它是怎么出来的?

------解决方案--------------------

下面是个简单的例子

http://www.cnblogs.com/zhongweiv/archive/2011/11/07/Displacement.html
------解决方案--------------------
哦忘记说了,除了有符号位,其它位也是补码。这很重要。如果你把二进制补码写出来,再移位(但是符号位不移动),就明白了。
------解决方案--------------------
探讨

引用:

高位是符号位。

如果你学过一点计算机原理,就学过整数的二进制编码以及运算。

你是在想不明白,你把16换成二进制10000,再来思考移位以后逻辑移位和算术移位,逻辑移位(会看符号)什么时候补1什么时候补0,?你去看看计算机组成原理吧