gpt4 book ai didi

c# - 为什么 C# 会针对 ushorts 上的模运算发出错误 "cannot implicitly convert int to ushort"?

转载 作者:太空狗 更新时间:2023-10-29 21:21:03 28 4
gpt4 key购买 nike

在另一个线程中,有人问为什么要添加两个 ushort值在 C# 中引发错误。例如

ushort x = 4;
ushort y = 23;
ushort z = x+y; // ERROR cannot implicitly convert int to ushort

在该线程上,人们争论说 plus + 运算符默认采用两个 int,这是一种有助于避免算术溢出的语言功能。但是我在以下函数中遇到了同样的错误:

public RGB(ushort red, ushort green, ushort blue)
{
// this class RGB has three ushort fields: r, g, and b
r = red % ((ushort)256);
g = green % ((ushort)256);
b = blue % ((ushort)256);
}

编译器出错并提示“无法将类型‘int’隐式转换为‘ushort’。存在显式转换...”。但是这里关于模 % 运算符防止溢出的论点根本没有任何意义:如果 x 和 y 是 ushort值,然后 x%y < max(x,y) ,因此不存在溢出到整数的风险。那么为什么我会收到此错误?

最佳答案

正在使用的 % 运算符,即使与 shortsushorts 一起使用,也具有 int %(int a, int b) 的签名.所以你的短裤被提升为整数,你的结果是一个你试图分配给 ushort 的整数,这是一个有损转换,所以你需要明确。

考虑一下:

ushort x = 5;
ushort y = 6;
var res = x % y;
Console.WriteLine(res.GetType()); // System.Int32
ushort z = res; // cast error, explicit conversion exists
ushort zz = (ushort)res; // Fine, we cast down.

关于c# - 为什么 C# 会针对 ushorts 上的模运算发出错误 "cannot implicitly convert int to ushort"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55638528/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com