相关疑难解决方法(0)

"| ="是什么意思?(管道等运算符)

我尝试使用Google搜索和Stack Overflow搜索,但它没有显示任何结果.我在开源库代码中看到了这个:

Notification notification = new Notification(icon, tickerText, when);
notification.defaults |= Notification.DEFAULT_SOUND;
notification.defaults |= Notification.DEFAULT_VIBRATE;
Run Code Online (Sandbox Code Playgroud)

"| ="(pipe equal operator)是什么意思?

java android operators

211
推荐指数
6
解决办法
14万
查看次数

如何在C++中使用枚举作为标志?

enums作为标志处理可以在C#中通过[Flags]属性很好地工作,但是在C++中执行此操作的最佳方法是什么?

例如,我想写:

enum AnimalFlags
{
    HasClaws = 1,
    CanFly =2,
    EatsFish = 4,
    Endangered = 8
};

seahawk.flags = CanFly | EatsFish | Endangered;
Run Code Online (Sandbox Code Playgroud)

但是,我收到关于int/ enum转换的编译器错误.是否有更好的表达方式而不仅仅是直接的铸造?优选地,我不想依赖来自第三方库的构造,例如boost或Qt.

编辑:如答案中所示,我可以通过声明seahawk.flags为避免编译器错误int.但是,我想有一些机制来强制执行类型安全,所以有人不能写seahawk.flags = HasMaximizeButton.

c++ enums

171
推荐指数
13
解决办法
13万
查看次数

理解按位AND运算符

我一直在阅读Kochan的书"Objective-C编程"中的Objective-C中的位运算符.

我对这一部分非常困惑,尽管到目前为止我已经真正了解了大部分内容.

以下是本书的引用:

按位AND运算符

按位AND运算经常用于屏蔽操作.也就是说,可以容易地使用该运算符将数据项的特定位设置为0.例如,语句

w3 = w1 & 3;
Run Code Online (Sandbox Code Playgroud)

w3将w1的值与常数3进行逐位AND运算.这与将w中的所有位设置为相同的效果,除了最右边的两位为0,并保留w1中最右边的两位.

与C中的所有二进制算术运算符一样,二进制位运算符也可以通过添加等号用作赋值运算符.该声明

word &= 15;
Run Code Online (Sandbox Code Playgroud)

因此执行与以下相同的功能:

word = word & 15;
Run Code Online (Sandbox Code Playgroud)

此外,它具有将除最右边的四位字之外的所有字设置为0的效果.当使用常量执行按位运算时,以八进制或十六进制表示法表示常量通常更方便.

好的,这就是我想要了解的内容.现在,我对这整个概念非常困惑,我只想找一点澄清,如果有人愿意帮我解决这个问题.

当书现在引用"设置所有位"时,所有位......究竟是什么.这不仅仅是第二个基数中的0或1,换句话说,二进制?

如果是这样,为什么在第一个例子中除了"最右边2"到0之外的所有位?它是2,因为它是3 - 1,从我们的常数中取3吗?

谢谢!

bit-manipulation objective-c operators bitwise-operators

48
推荐指数
1
解决办法
2万
查看次数

C 中的按位运算 |=

我正在查看示例代码并发现此操作:

displayMap[x + (y/8)*LCD_WIDTH]|= 1 (shift by) shift; 
Run Code Online (Sandbox Code Playgroud)

在哪里

byte shift = y % 8;
Run Code Online (Sandbox Code Playgroud)

我理解|操作数,=但是它们两个一起做什么。

c bit-manipulation arduino bitwise-operators

-2
推荐指数
1
解决办法
3万
查看次数

什么| =表示在c ++中

我有代码行

int i =0;
result |= EXPECT_EQUAL(list.size(),     3);
Run Code Online (Sandbox Code Playgroud)

什么|=男子?

我试图编译类似的东西:

int result |= 5;
Run Code Online (Sandbox Code Playgroud)

但得到了错误:

aaa.cpp:26:16: error: expected initializer before ‘|=’ token
Run Code Online (Sandbox Code Playgroud)

c++

-9
推荐指数
2
解决办法
4万
查看次数