gpt4 book ai didi

C# 0(减号)uint = 无符号结果?

转载 作者:太空狗 更新时间:2023-10-30 00:43:50 30 4
gpt4 key购买 nike

public void Foo(double d){
// when called below, d == 2^32-1
...
}
public void Bar(){
uint ui = 1;
Foo( 0 - ui );
}

我希望 0 和 ui 在这里都被提升为有符号多头。

是的,使用 0 字面值可以在编译时知道转换为 uint 是安全的,

但我想这一切似乎都是错误的。至少应该发出警告。

谢谢!

语言规范是否涵盖像这样的半歧义情况?

最佳答案

为什么要将任何内容提升为 long?规范(第 7.8.5 节)列出了四个用于整数减法的运算符:

  • int operator-(int x, int y);
  • uint 运算符-(uint x, uint y);
  • 长运算符-(long x, long y);
  • ulong 运算符-(ulong x, ulong y);

鉴于常量值 0 可以隐式转换为 uint,但是 uintui 是 < em>不可隐式转换为int,第二个运算符根据7.3.4节中描述的二元运算符重载决策步骤选择。

(您是否可能没有意识到从 0uint 的隐式常量表达式转换,而这就是令人困惑的部分?请参阅第 6.1.9 节C# 4 规范的详细信息。)

接下来的第 7.3.4 节(然后引用 7.3.5 和 7.5.3)有点曲折,但我认为它定义明确,一点也不含糊。

如果困扰您的是溢出,this 是否也会失败?

int x = 10;
int y = int.MaxValue - 5;
int z = x + y;

如果不是,真正有什么区别?

关于C# 0(减号)uint = 无符号结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9525609/

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