我对 C# 中数字类型的丢失信息有点困惑。
当我这样做时:
int x = 32780;
short y = (short)x;
我的结果是:y 为 -32756 而不是预期的 32767。为什么?这是如何计算的?
短的范围:-32768 到 32767 int 范围:-2,147,483,648 到 2,147,483,647
最佳答案
您似乎期待的是“向下舍入”效果,而不是实际发生的情况,这是对数据的按位重新解释。
在二进制中,x
等于 00000000000000001000000000001100
,这是一个只有 16 位有效位的 32 位数字。 short
是一个 16 位 signed 整数,用 two’s complement notation 表示.
转换时,x
的最后 16 位被复制到 y
中,得到 1000000000001100
。重要的是,第一个数字是 1
。在补码表示法中,这是 -32756
。您的数字没有四舍五入——它被读取为好像是 16 位的。
关于c# - 将 int 转换为 short 会产生意想不到的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11847791/