读书人

前辈们关于移位运算。该怎么处理

发布时间: 2012-04-11 17:42:33 作者: rapoo

前辈们关于移位运算。。
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,?你去看看计算机组成原理吧

读书人网 >C#

热点推荐