c# – 与Ushort的结果混淆
发布时间:2020-12-15 08:42:24 所属栏目:百科 来源:网络整理
导读:考虑以下代码: ushort a = 60000;a = (ushort)(a * a / a);Console.WriteLine("A = " + a); //这打印53954.为什么? 和 ushort a = 40000;a = (ushort)(a * a / a);Console.WriteLine("a = " + a.ToString()); //这打印40000.怎么样? 任何帮助明显…… 解
考虑以下代码:
ushort a = 60000; a = (ushort)(a * a / a); Console.WriteLine("A = " + a); //这打印53954.为什么? 和 ushort a = 40000; a = (ushort)(a * a / a); Console.WriteLine("a = " + a.ToString()); //这打印40000.怎么样? 任何帮助明显…… 解决方法
因为60000 ^ 2是3600000000,但是int可以容纳的最大数字是2,147,483,647,所以它从-2,648开始.
一个ushort可以容纳65,535,然后从0开始: 例如,这打印0: ushort myShort = 65535; myShort++; Console.WriteLine(myShort); //0 如果将其分解为多个步骤,则更容易看到这个: var B = A * A; 这实际上超过了int32的容量,因此它从-2,648开始,因此b等于-694967296 ushort A = 60000; var B = A * A; //-694967296 var C = B / A; //-11582 ushort D = (ushort)(C); //53954 40000工作的原因是它不超过int32的容量. ushort A = 40000; var B = A * A; //1600000000 var C = B / A; //40000 ushort D = (ushort)(C); //40000 uint可以容纳60000 ^ 2,所以这可行: ushort A = 60000; var B = (uint)A * A; //3600000000 var C = B / A; //60000 ushort D = (ushort)(C); //60000 将C转换为ushort yeilds 53954的原因是因为C的字节是: 96 234 0 0 而D的字节是: 96 234 所以它们保持相同的后备字节,这就是为什么你得到53954和-11582 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |