我被震撼知道有没有算术运算符+,-,*,/,并%在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#设计师会这样做?他们对此有何看法?
有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)
请记住,当您执行添加操作时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)
从来源:
这种行为是因为设计者没有考虑过这个
byte和short实际的数字,但他们认为它们只是序列bits.因此对它们执行算术运算没有任何意义,所以如果是这种情况,则int和long将用于此目的.
| 归档时间: |
|
| 查看次数: |
461 次 |
| 最近记录: |