C# 如果byte+byte=int,为什么int+int不是短/长?在C中

C# 如果byte+byte=int,为什么int+int不是短/长?在C中,c#,.net,clr,C#,.net,Clr,这可以通过假设算术运算导致溢出的情况来证明。那么,如果情况是这样的话,那么int呢 byte num1 = 5; byte num2 = 6; byte res = num1 + num2; //Adding bytes asks for a explicit cast to int - "Cannot Implicitly Convert 'int' to 'byte' 因此,这也应该抛出一个正确的强制转换错误,它应该要求长时间的 链条还在继续,对吗 已经有另一个类似的问题,但

这可以通过假设算术运算导致溢出的情况来证明。那么,如果情况是这样的话,那么int呢

byte num1 = 5;
byte num2 = 6;

byte res = num1 + num2; 
//Adding bytes asks for a explicit cast to int - "Cannot Implicitly Convert 'int' to 'byte'
因此,这也应该抛出一个正确的强制转换错误,它应该要求长时间的 链条还在继续,对吗


已经有另一个类似的问题,但它没有回答这个问题

仅仅因为可以这样证明,并不意味着这就是原因

埃里克·利珀特(Eric Lippert)在对您链接的问题的评论中对此很清楚:

下面的各种思考是设计考虑的合理近似。更一般地说:我不认为字节是数字;我认为它们是位的模式,可以解释为数字、字符、颜色等等。如果要对它们进行数学运算并将其视为数字,那么将结果转换为更常见的数字类型是有意义的


仅仅因为可以这样证明,并不意味着这就是原因

埃里克·利珀特(Eric Lippert)在对您链接的问题的评论中对此很清楚:

下面的各种思考是设计考虑的合理近似。更一般地说:我不认为字节是数字;我认为它们是位的模式,可以解释为数字、字符、颜色等等。如果要对它们进行数学运算并将其视为数字,那么将结果转换为更常见的数字类型是有意义的


byte+byte=int不是,因为可能存在溢出。这是因为只定义了4个以上的运算符。请参阅列表。此外,即使溢出可以作为类型提升的理由,字节+字节结果也会很短,而不是int,因此我并不认为它是有效的理由。字节+字节=int不是因为可能存在溢出。这是因为只定义了4个以上的运算符。请参阅列表。此外,即使溢出可以作为类型提升的对正,字节+字节结果也会很短,而不是int,因此我并不认为它是有效的对正。这很有意义!我没注意到,谢谢!在C语言中,int的定义实际上并没有指定大小。允许映射到CPU可以有效使用的类型。@JeremyLakeman我认为这不相关;这个问题是关于C的。我确信C对“+”的隐式类型提升影响了C的设计。@raghavenkat:我在对的评论中也提到了具体的问题。简单地说:如果int加int是长的,那么本质上就是说C中的每个整数数学计算都是以长的形式进行的,因为为什么要停止加法呢?乘法也需要是长的,如果整数的加法和乘法是长的,那么减法和除法也是长的,现在我们一直在用64位来做所有的算术。这对性能和代码可读性都有影响。这很有意义!我没注意到,谢谢!在C语言中,int的定义实际上并没有指定大小。允许映射到CPU可以有效使用的类型。@JeremyLakeman我认为这不相关;这个问题是关于C的。我确信C对“+”的隐式类型提升影响了C的设计。@raghavenkat:我在对的评论中也提到了具体的问题。简单地说:如果int加int是长的,那么本质上就是说C中的每个整数数学计算都是以长的形式进行的,因为为什么要停止加法呢?乘法也需要是长的,如果整数的加法和乘法是长的,那么减法和除法也是长的,现在我们一直在用64位来做所有的算术。这对性能有影响,对代码可读性也有影响。
int num1 = 2;
int num2 = 4;

int res = num1 + num2;
// This works, but when we take the previous assumption to consideration here
// here int may also lead to overflow right