【移位计算怪问题】C# uint64 左移位计算得到结果低位不是补0?为什么?好奇怪!

doublea=6493926.0;UInt64b=Convert.ToUInt64(a)<<42;得到结果居然是b=1011304451395800268后42位居然不... double a = 6493926.0;
UInt64 b = Convert.ToUInt64(a)<<42 ;
得到结果居然是b=1011304451395800268
后42位居然不是0!
(我这边是要做编码,假设a变量在编码中用24位来存储,我的目的是去掉a这个数的前2位,取a的后22位,放到一个uint64类型的变量b的前22位去)
求问,该如何正确做到?

下图左计算器是 a = 6493926,又上是a<<40,右下是a<<42
展开
 我来答
百度网友6705c13
2014-09-19 · TA获得超过801个赞
知道小有建树答主
回答量:613
采纳率:83%
帮助的人:202万
展开全部
b应该是10113844513958002688,十六进制是0x8c5b980000000000,低位全是0,没错的。
你给的值最后面少了一位,windows的计算器输入不了这么大的值,因为这个数超过int64了
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式