gpt4 book ai didi

c# - 与 Ushort 的结果混淆

转载 作者:太空狗 更新时间:2023-10-29 21:10:03 28 4
gpt4 key购买 nike

考虑以下代码:

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,147,483,648 开始。

一个 ushort 可以容纳 65,535,然后从 0 开始:

例如,这会打印 0:

ushort myShort = 65535;
myShort++;
Console.WriteLine(myShort); //0

如果你把它分成几步就更容易看到:

var B = A * A;

这实际上超过了 int32 的容量,所以它从 -2,147,483,648 开始,因此 b 等于 -694967296然后,当您拆分 B/A 时,您将得到:-11582,当将其转换为 ushort 时,将变为 53954。

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 得到 53954 是因为 C 的字节是:

96
234
0
0

D的字节是:

96
234

所以它们拥有相同的支持字节,这就是为什么你得到 53954 和 -11582

关于c# - 与 Ushort 的结果混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9563893/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com