【发布时间】:2017-05-04 01:28:51
【问题描述】:
我记得我们已经学习了有符号整数类型(sbyte、short、int、long) 第一位是符号,后7位是值。
我看到 sbyte 范围是 -128 到 127,而我认为它必须是 -127 到 127。
我尝试了一些代码来了解这是怎么可能的,但我遇到了两个奇怪的事情:
1- 我尝试了以下代码:
sbyte a = -128;
Console.Write(Convert.ToString(a, 2));
结果是
1111111100000000
好像它是一个两字节的变量。
2-尝试将范围内的所有数字转换为二进制:
for(sbyte i=-128;i<=127;i++)
{
Console.WriteLine(Convert.ToString(i, 2));
if(i==127) break;
}
如果我省略了if(i==127) break;,则循环继续。加上break,循环中的代码不会执行,有些好像-128大于127。
我的结论: 因为我认为 -128 不能适合无符号字节变量,并且第一次和第二次尝试批准了 (111111110000000 > 01111111) 但是如果它不适合,那为什么范围是-128到127?
【问题讨论】:
-
我找不到合适的帖子标题
-
有符号整数类型不是“符号大小”类型。他们使用“2 的补码”表示,符号字节的范围为 -128 到 127。 en.wikipedia.org/wiki/Two's_complement
-
您算错了“16 位结果”中 1 和 0 的数量。实际值有 9 个 1 和 7 个 0,但在您的问题中,您输入了 8 个 1 和 8 个零。
-
@Aziz 非常感谢。这真的很有趣