前辈们关于移位运算。。

cquptzy8522065 2012-03-18 05:05:24
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呢,我实在想不明白啊。。它是怎么出来的?
...全文
123 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
EnForGrass 2012-03-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 chinajiyong 的回复:]

引用 1 楼 sp1234 的回复:

高位是符号位。

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

你是在想不明白,你把16换成二进制10000,再来思考移位以后逻辑移位和算术移位,逻辑移位(会看符号)什么时候补1什么时候补0,?你去看看计算机组成原理吧
[/Quote]
对不住老打错字。
移位分为逻辑移位和算术移位,逻辑移位(会看符号)什么时候补1,什么时候补0?你去看看计算机组成原理吧
  • 打赏
  • 举报
回复
哦忘记说了,除了有符号位,其它位也是补码。这很重要。如果你把二进制补码写出来,再移位(但是符号位不移动),就明白了。
EnForGrass 2012-03-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sp1234 的回复:]

高位是符号位。

如果你学过一点计算机原理,就学过整数的二进制编码以及运算。
[/Quote]
你是在想不明白,你把16换成二进制10000,再来思考移位以后逻辑移位和算术移位,逻辑移位(会看符号)什么时候补1什么时候补0,?你去看看计算机组成原理吧
shaofei830927 2012-03-18
  • 打赏
  • 举报
回复
左移一位 就是两倍
porschev 2012-03-18
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
高位是符号位。

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

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧