首页 / C# / C#用C执行按位运算
C#用C执行按位运算
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#用C执行按位运算,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1669字,纯文字阅读大概需要3分钟。
内容图文
嘿伙计们,所以我环顾四周,我似乎无法找到答案,我猜我正在寻找所有错误的条款.
无论如何这里是我的问题我一直在修改整个C程序在C#中工作,我已经完成了,我在C程序中有这个If语句
if(info[i].location & 0x8 ||
info[i].location & 0x100||
info[i].location & 0x200)
{
//do work
}
else
{
return
}
当然,当我在C#中执行此操作时,它会给我一个“运算符”||’不能应用于’int’和’int’类型的操作数“错误
关于我的问题是什么的任何线索,我猜C#已经有了这样做的方法,因为我对这些旧的C运算符相当不熟悉
非常感谢
解决方法:
为什么失败
从根本上说,它与此相同:
if (someInteger) // C or C++
VS
if (someInteger != 0) // C#
基本上C#在逻辑运算符和条件方面要严格得多 – 它迫使你使用bool或者可以转换为bool的东西.
顺便说一下,这也是为什么在C#中这不仅仅是一个警告,而是一个完整的错误:
int x = ...;
if (x = 10) // Whoops - meant to be == but it's actually an assignment
如果你看到这样的比较:
if (10 == x)
这通常是开发人员试图避免像上面这样的拼写错误 – 但是在C#中不需要它,除非你真的在与常量bool值进行比较.
解决问题
我怀疑你只需要:
if (((info[i].location & 0x8) != 0)) ||
((info[i].location & 0x100) != 0)) ||
((info[i].location & 0x200) != 0)))
您可能不需要所有这些括号……但另一种选择只是使用一个测试:
if ((info[i].location & 0x308) != 0)
毕竟,你只是测试是否设置了这三个位中的任何一个……
您还应该考虑使用基于标志的枚举:
[Flags]
public enum LocationTypes
{
Foo = 1 << 3; // The original 0x8
Bar = 1 << 8; // The original 0x100
Baz = 1 << 9; // The original 0x200
}
然后你可以使用:
LocationTypes mask = LocationTypes.Foo | LocationTypes.Bar | LocationTypes.Baz;
if ((info[i].location) & mask != 0)
或者使用Unconstrained Melody:
LocationTypes mask = LocationTypes.Foo | LocationTypes.Bar | LocationTypes.Baz;
if (info[i].location.HasAny(mask))
内容总结
以上是互联网集市为您收集整理的C#用C执行按位运算全部内容,希望文章能够帮你解决C#用C执行按位运算所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。