加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – int或uint或什么

发布时间:2020-12-15 19:34:53 所属栏目:百科 来源:网络整理
导读:考虑一下 int i = 2147483647; var n = i + 3; i = n; Console.WriteLine(i); // prints -2147483646 (1) Console.WriteLine(n); // prints -2147483646 (2) Console.WriteLine(n.GetType()); // prints System.Int32 (3) 我对以下很困惑 (1) how could int
考虑一下

int i = 2147483647;
        var n = i + 3;
        i = n;

        Console.WriteLine(i);           // prints -2147483646    (1)
        Console.WriteLine(n);           // prints -2147483646    (2)
        Console.WriteLine(n.GetType()); // prints System.Int32   (3)

我对以下很困惑

  • (1) how could int hold the value -2147483646 ? (int range = -2,147,483,648 to 2,647)
  • (2) why does this print -2147483648 but not 2147483648 (compiler should
    decide better type as int range
    exceeds)
  • (3) if it is converted somewhere,why n.GetType() gives System.Int32
    ?

编辑1:做出更正:现在你将得到我正在获得的东西. (对不起)

var n = i + 1; to

var n = i + 3;

Edit2:还有一件事,如果它是溢出的,为什么不引发异常?

增加:当发生溢出时,为其设置类型是不正确的

var n

在语句中var n = i 3;相应的另一种类型?

欢迎你建议一个更好的头衔,因为这至少对我来说没有意义

谢谢

解决方法

更新:海报解决了他的问题.

1)这是预期的输出,因为你向int.MaxValue添加了3,导致溢出.在.NET中,默认情况下,这是一个合法的操作,在未经检查的代码中给出负值的回绕,但是如果在代码周围添加一个选中的块,它将抛出一个OverflowException.

2)用var声明的变量的类型在编译时而不是运行时确定.添加两个Int32s的规则是提供Int32,而不是UInt32,Int64或其他东西.因此,即使在运行时您可以看到Int32的结果太大,它仍然必须返回Int32.

3)它没有转换为其他类型.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读