小编Sha*_*ble的帖子

有人能用二进制解释C#中的溢出吗?

我目前正在阅读一本关于C#编程的书,它简要介绍了溢出和下溢,并且作者总结了当你超越特定类型的允许范围时会发生什么.

short a = 30000;
short b = 30000;
short sum = (short)(a + b); // Explicitly cast back into short
Console.WriteLine(sum); // This would output the value -5536
Run Code Online (Sandbox Code Playgroud)

所以short类型只有-32768到32767的范围,书中给出的解释是"对于整数类型(byte,short,int和long),最高位(溢出)被丢弃这是特别奇怪的,因为计算机然后将其解释为环绕.这就是我们在示例中最终得到负值的原因.如果从特定类型的最大值开始,您可以很容易地看到这种情况发生(例如,short.MaxValue)并添加一个." C#Players Guide第二版,第9章,第58页

你最终会达到最低限度(-32768).

我有一个问题理解这一点当作家谈到"计算机将其解释为环绕"时我感到困惑

我尝试理解这个的方式是短类型使用2个字节(16位)

所以数字32767 = 0111111111111111,如果我要+1到二进制字符串我最终得到32768 = 1000000000000000(不能用短类型表示为最大值是32767)所以编译器给出-32768.为什么它最终成为负面?

我理解使用二元恭维来表示负数的概念,有人可以在这里纠正我的想法或详细说明因为我不完全理解为什么我们只使用16位的15位来表示正范围和最重要的位负范围

c# binary integer-overflow twos-complement

6
推荐指数
1
解决办法
298
查看次数

标签 统计

binary ×1

c# ×1

integer-overflow ×1

twos-complement ×1