c# - 将 int 转换为 short 会产生意想不到的结果

标签 c# casting

我对 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/

相关文章:

c++ - 定义明确的缩小铸型

c# - WPF:使用匿名方法的 UnauthorizedAccessException

c# - .NET 程序集绑定(bind),我可以将一个程序集映射到另一个程序集中的版本吗?

C# Linq 多个查询在一个单一的

c - 将返回对象指针的函数强制转换为返回空指针的函数是否合法?

将整数和 float 的字符串转换为 C 中的 float 组

c# - 指定的强制类型转换无效 – SQL float to C# double

c# - 从 javascript 调用 c# 函数

casting - 在Pig中将字段强制转换为Bag数据类型

r - R 中的数据透视表不均匀(长度列)