在一本书上看到这个例子,有个地方不明白,请教大家。
using System;
class Test
{
public static void Main()
{
int x=16;
Console.WriteLine(x);
int y=x>>2;
Console.WriteLine(y);
y=y>>2;
Console.WriteLine(y);
y=y>>2;
Console.WriteLine(y);
        x=-16;
Console.WriteLine(x);
int z=x>>2;
Console.WriteLine(z);
z=z>>2;
Console.WriteLine(z);
z=z>>2;
Console.WriteLine(z);
}
}
输出是:
16
4
1
0
-16
-4
-1
-1
对于最后一个输出是 -1 我好像有点明白,但是又说不出原因,希望大家帮忙~~

解决方案 »

  1.   

    把数值转换成二进制,自己移动移动就知道了,
    int 32位机好像是4个字节
      

  2.   

    看代码与结果你就清楚了 为什么 -1 移位还是 -1class Test
    {
    public static void Main()
    {
    int x=-1;
    //转换为二进制输出
    Console.WriteLine(Convert.ToString (x,2));
    //移位,因为-1的二进制表示已经都是11111111111111了,所以怎么移都是-1
    int z=x>>2;
    Console.WriteLine(Convert.ToString (x,2));
    Console.ReadKey ();
    }
    }
    结果:
    11111111111111111111111111111111
    11111111111111111111111111111111因为-1的二进制表示已经都是都是1了,所以怎么移都是-1啊
      

  3.   

    Convert.ToString (x,2)是将x转换为二进制。。这里面有关于负数的存储问题啊你可以慢慢调试看看-1的表示比较特殊呵呵