关于移位的问题

bydxyj 2009-12-09 12:06:32
在一本书上看到这个例子,有个地方不明白,请教大家。
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 我好像有点明白,但是又说不出原因,希望大家帮忙~~
...全文
75 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
数据之巅 2009-12-09
  • 打赏
  • 举报
回复
Convert.ToString (x,2)是将x转换为二进制。。。。。这里面有关于负数的存储问题啊。。。你可以慢慢调试看看。。。-1的表示比较特殊。。。呵呵
数据之巅 2009-12-09
  • 打赏
  • 举报
回复
看代码与结果你就清楚了 为什么 -1 移位还是 -1

class 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啊
数据之巅 2009-12-09
  • 打赏
  • 举报
回复
先表示成二进制 然后手动移位 就知道了。。
wenbin 2009-12-09
  • 打赏
  • 举报
回复
负数的最高位补码是1
assky124 2009-12-09
  • 打赏
  • 举报
回复
把数值转换成二进制,自己移动移动就知道了,
int 32位机好像是4个字节
hhc123 2009-12-09
  • 打赏
  • 举报
回复
还是去看点关于移位的信息吧

111,092

社区成员

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

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

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