【发布时间】:2019-04-03 10:57:01
【问题描述】:
另一个帖子跟踪错误Cannot implicitly convert type 'long' to 'int'
public int FindComplement(int num) {
uint i = 0;
uint mask = ~i;
while((mask&num) != 0) mask <<= 1;
//return ~mask^num; //<-- error CS0266
return (int)~mask^num; //<--it works with (int)
}
抱歉问了太多问题,我想知道为什么return ~mask^num会导致类似的错误
错误 CS0266:无法将类型“long”隐式转换为“int”。存在显式转换(您是否缺少演员表?)
在我的环境中,return ~mask^num; 会出错,而return (int)~mask^num 可以工作。而且这里似乎没有 long 类型。
【问题讨论】:
-
因为
^是一个长运算符并且还返回long -
@hotfix
^不是长运算符。 -
相关引述:否则,如果任一操作数为uint类型,而另一操作数为sbyte、short或int类型,则两个操作数都转换为long类型。
-
@hotfix
long.operator^确实是一个长运算符。例如。int.operator^不是。
标签: c#