gpt4 book ai didi

c# - 在 Visual Studio 2015 中用于符号扩展操作数的按位或运算符

转载 作者:可可西里 更新时间:2023-11-01 08:06:08 26 4
gpt4 key购买 nike

我刚刚尝试安装 Visual Studio 2015,在尝试编译一个旧项目时,我收到了警告

CS0675 Bitwise-or operator used on a sign-extended operand; consider casting to a smaller unsigned type first

对于在 Visual Studio 2013 中编译时未给出相同警告的一段代码。我发现重现所需的只是这段非常简单的代码:

short a = 0;
int b = 0;

a |= (short)b;

现在,我已经阅读了this SO question , 我读过 Eric Lippert's blog post在这个问题上,我很快就阅读了 sign extension ,但我的理解是,当您从包含较少位数的有符号数类型转换为包含较多位数的有符号数类型时,例如 shortint 例如。

但由于我是从 int 转换为 short,所以如果我没记错的话,应该不会发生符号扩展。这在早期版本的 Visual Studio 中不会发出警告,这让我相信这一定是 Visual Studio 2015 编译器 (Roslyn) 中的错误。我是否误解了符号扩展和/或编译器在这里的工作方式,或者这很可能是编译器错误?

更新

Jon Skeet 指出实际上确实发生了一个符号扩展,因为 | 运算符没有为 short 定义,所以有一个隐式转换为 int 在结果再次转换回 short 之前。但是,编译器不应该发出此警告,因为转换是无害的。正如已接受的答案中指出的那样,Roslyn 编译器中存在错误。

最佳答案

这只是一个错误。检测和报告此错误的代码是在 VS2015 开发的后期添加的(请参阅 https://github.com/dotnet/roslyn/issues/909https://github.com/dotnet/roslyn/pull/2416),与 VS2013 相比,它检测到的案例太多。现在有一个错误报告 ( https://github.com/dotnet/roslyn/issues/4027 ) 来修复这个问题。

关于c# - 在 Visual Studio 2015 中用于符号扩展操作数的按位或运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31542256/

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