【问题标题】:Why we use int instead of byte? [duplicate]为什么我们使用 int 而不是 byte? [复制]
【发布时间】:2020-07-11 08:25:24
【问题描述】:

字节占用的空间更少。如果我没记错的话,一个 int 变量占用 4 个字节 - 而一个 byte 变量,嗯...顾名思义,只需要 1 个字节。
我认为我们使用 int 是因为大多数方法都需要 int 类型的参数,如果我们向它们提供字节类型的数据,它们根本就无法工作。
好吧,我尝试编写一个需要 int numberOne 和 int numberTwo 的简单方法,返回 numberOne + numberTwo。我用两种类型的字节变量喂它 - 它有效!
我对 C# 真的很陌生,并且一般都在开发 - 如果有一个我一无所知的明显答案,我很抱歉。也对不起我的英语。
有没有人好心解释一下每次我们想要使用整数数据类型时使用 int 有哪些好处,即使它只是可以保存在 0-255 范围内的东西?
谢谢!

static int Sum(int numberOne, int numberTwo)
{
    return numberOne + numberTwo;
}

static void Main(string[] args)
{
    byte numberOne = 1, numberTwo = 2;
    Console.WriteLine(Sum(numberOne, numberTwo));
}

【问题讨论】:

  • 有一个从byteint的隐式转换,这就是编译器不会报错的原因
  • 您面前有一台存储在十亿到一万亿字节之间的机器;你为什么担心他们三个?

标签: c#


【解决方案1】:

好问题!

重要的是要认识到,因为int 大于byte,任何适合byte 的值也适合int,没有任何溢出或“切断”部分的风险价值。

因此,C# 定义了widening conversion 的概念:将一种数据类型转换为另一种在允许值方面“更宽”的数据类型。

实际上你的代码相当于

static int Sum(int numberOne, int numberTwo)
{
    return numberOne + numberTwo;
}

static void Main(string[] args)
{
    byte numberOne = 1, numberTwo = 2;
    int arg1 = (int)numberOne, arg2 = (int)numberTwo;
    int result = Sum(numberOne, numberTwo);
    Console.WriteLine(result);
}

注意Sum的结果也是int,会调用Console.WriteLine(int)重载。

如果您按如下方式拆分最后一行,您可以看到这一点:

// Console.WriteLine(Sum(numberOne, numberTwo));
byte result = Sum(numberOne, numberTwo);
Console.WriteLine(result);

您将看到 int 到字节的“缩小”转换确实不会自动发生,因为您实际上可能会在这里丢失数据(假设 numberOne = 250 和 numberTwo = 200,然后 250 + 200 = 450 适合 int,但不适合没有溢出的字节。

如果你愿意,你应该这样说:

byte result = (byte)Sum(numberOne, numberTwo);

但风险自负。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-09
    • 2011-03-01
    • 1970-01-01
    • 2015-01-23
    • 2016-09-27
    • 2010-10-01
    • 2021-09-09
    相关资源
    最近更新 更多