-128如何适合sbyte

时间:2016-12-19 02:41:02

标签: c# types sbyte

我记得我们已经学会了有符号整数类型(sbyte,short,int,long) 第一位用于符号,后7位用于值。

我看到sbyte范围是-128到127,而我认为它必须是-127到127.

我尝试了一些代码来理解这是如何可能的,我遇到了两件奇怪的事情:

1-我尝试了以下代码:

sbyte a = -128;
Console.Write(Convert.ToString(a, 2));

和resutl是

  

11111111亿

好像它是一个双字节变量。

2-Tried将范围内的所有数字转换为二进制:

for(sbyte i=-128;i<=127;i++)
{
    Console.WriteLine(Convert.ToString(i, 2));
    if(i==127) break;
}

如果我省略if(i==127) break;循环继续。并且在中断时,循环中的代码不会执行,有些如何-128大于127.

我的结论: 因为我认为-128必须不适合无符号字节变量,并且第一次和第二次尝试都批准(111111110000000&gt; 01111111) 但如果它不合适,那么为什么范围是-128到127?

1 个答案:

答案 0 :(得分:3)

  

我发现sbyte范围是-128127,而我认为它必须是-127127

范围确实是[-128, +127]。范围[-127, +127]意味着sbyte只能代表255个不同的值,而8位代表256组合。

而且如果-128不合法,则编译器会抱怨

sbyte a = -128;

没有重载Convert.ToString(sbyte value, int toBase),因此在您的情况下Convert.ToString(int value, int toBase)被调用,sbyte被提升为int

要快速检查该值,您可以将sbyte打印为十六进制数字:

sbyte s = -1;
Console.WriteLine("{0:X}", s); // FF, i.e. 11111111
  

如果我省略if(i==127) break;循环继续。

当然,sbyte.MaxValue127,因此i<=127始终为true。当i127并且递增时,会发生溢出,下一个值为-128