为什么C#中的8位和16位整数没有算术运算符(+, - ,*,/,%)?

kis*_*pit 7 c#

我被震撼知道有没有算术运算符+,-,*,/,并%在C#中8个和16位整数.我正在阅读第23页的"C#5.0 Pocket Reference",如下所示.

在此输入图像描述

以下代码无法编译.

class Program
{
    static void With16Bit()
    {
        short a = 1;
        short b = 2;
        short c = a + b;
        Console.WriteLine(c);
    }

    static void With8Bit()
    {
        byte a = 1;
        byte b = 2;
        byte c = a + b;
        Console.WriteLine(c);
    }

    static void Main(string[] args)
    {
        With8Bit();
        With16Bit();
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么C#设计师会这样做?他们对此有何看法?

Dmi*_*nko 9

Int8,Int16的算术; 但结果是INT32,所以你必须:

class Program
{
    static void With16Bit()
    {
        short a = 1;
        short b = 2;
        short c = (short) (a + b); // <- cast, since short + short = int
        Console.WriteLine(c);
    }

    static void With8Bit()
    {
        byte a = 1;
        byte b = 2;
        byte c = (byte) (a + b); // <- cast, since byte + byte = int
        Console.WriteLine(c);
    }

    static void Main(string[] args)
    {
        With8Bit();
        With16Bit();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 是的,但这不是他的问题:"为什么C#设计师会这样做?他们对此有何看法?" (3认同)

Sud*_*udi 5

请记住,当您执行添加操作时short,byte默认结果将是Integer.

所以 :

byte + byte = int
short + short = int

因此,如果您想要取回实际值,则需要将其转回.

试试这个:

       short a = 1;
       short b = 2;
       short c =(short) (a + b);
       Console.WriteLine(c);

       byte a = 1;
       byte b = 2;
       byte c =(byte) (a + b);
       Console.WriteLine(c);
Run Code Online (Sandbox Code Playgroud)

来源:

这种行为是因为设计者没有考虑过这个 byteshort实际的数字,但他们认为它们只是序列bits.因此对它们执行算术运算没有任何意义,所以如果是这种情况,则int和long将用于此目的.