gpt4 book ai didi

c# - 在已检查和未检查的上下文中编译

转载 作者:太空宇宙 更新时间:2023-11-03 18:31:24 26 4
gpt4 key购买 nike

j 的值是多少?

Int32 i = Int32.MinValue;
Int32 j = -i;

在检查上下文中编译会抛出异常。
在未经检查的情况下,我们获得值 Int32.MinValue

但为什么会这样呢?

最佳答案

这是最小和最大 Int32 值:

                   Dec         Bin (first bit is a sign bit)
Int32.MinValue -2147483648 10000000000000000000000000000000
Int32.MaxValue 2147483647 01111111111111111111111111111111

当您尝试通过显式溢出检查获取 -(-2147483648) 时,在这种情况下您会遇到异常,因为 2147483648 大于 int 类型的最大允许值.

那么为什么在允许溢出时得到 MinValue?因为当 Int32.MinValue 被取反时你有 2147483648 它有二进制表示 1000000000000000000000000000000 但有符号整数的第一位是符号位,所以你得到准确的 Int32.Min 值。

所以,这里的问题是将第一位作为数字符号。如果您将取反的 Int32.Min 值的结果分配给无符号整数,您将按预期获得 2147483648 值:

Int32 i = Int32.MinValue;
UInt32 j = (UInt32)-i; // it has 32 bits and does not treat first bit as sign

关于c# - 在已检查和未检查的上下文中编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21725081/

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