byte + byte = int ... 为什么?

4

本文介绍了byte + byte = int ... 为什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

限时送ChatGPT账号..

看看这段 C# 代码:

Looking at this C# code:

byte x = 1;
byte y = 2;
byte z = x + y; // ERROR: Cannot implicitly convert type 'int' to 'byte'

byte(或 short)类型执行的任何数学运算的结果都会隐式转换回整数.解决方案是将结果显式转换回一个字节:

The result of any math performed on byte (or short) types is implicitly cast back to an integer. The solution is to explicitly cast the result back to a byte:

byte z = (byte)(x + y); // this works

我想知道为什么?它是建筑的吗?哲学?

What I am wondering is why? Is it architectural? Philosophical?

我们有:

  • int + int = int
  • long + long = long
  • float + float = float
  • double + double = double
  • int + int = int
  • long + long = long
  • float + float = float
  • double + double = double

为什么不呢:

  • 字节 + 字节 = 字节
  • short + short = short?
  • byte + byte = byte
  • short + short = short?

一点背景知识:我正在对小数"(即 < 8)执行一长串计算,并将中间结果存储在一个大数组中.使用 byte 数组(而不是 int 数组)更快(因为缓存命中).但是通过代码传播的大量字节转换使其更加难以阅读.

A bit of background: I am performing a long list of calculations on "small numbers" (i.e. < 8) and storing the intermediate results in a large array. Using a byte array (instead of an int array) is faster (because of cache hits). But the extensive byte-casts spread through the code make it that much more unreadable.

推荐答案

你的代码片段的第三行:

The third line of your code snippet:

byte z = x + y;

其实就是

byte z = (int) x + (int) y;

因此,对字节没有 + 操作,字节首先转换为整数,两个整数相加的结果是一个(32 位)整数.

So, there is no + operation on bytes, bytes are first cast to integers and the result of addition of two integers is a (32-bit) integer.

这篇关于byte + byte = int ... 为什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

C# 中的多播委托奇怪行为?
Multicast delegate weird behavior in C#?(C# 中的多播委托奇怪行为?)...
2023-11-11 C#/.NET开发问题
6

参数计数与调用不匹配?
Parameter count mismatch with Invoke?(参数计数与调用不匹配?)...
2023-11-11 C#/.NET开发问题
26

如何将代表存储在列表中
How to store delegates in a List(如何将代表存储在列表中)...
2023-11-11 C#/.NET开发问题
6

代表如何工作(在后台)?
How delegates work (in the background)?(代表如何工作(在后台)?)...
2023-11-11 C#/.NET开发问题
5

没有 EndInvoke 的 C# 异步调用?
C# Asynchronous call without EndInvoke?(没有 EndInvoke 的 C# 异步调用?)...
2023-11-11 C#/.NET开发问题
2

Delegate.CreateDelegate() 和泛型:错误绑定到目标方法
Delegate.CreateDelegate() and generics: Error binding to target method(Delegate.CreateDelegate() 和泛型:错误绑定到目标方法)...
2023-11-11 C#/.NET开发问题
14