今天看objective-c 官方文档 看到这个 '|'符号,不太懂 是什么意思,求赐教。

看到这两句摸不着头脑了:

NSUInteger unitFlags =NSYearCalendarUnit| NSMonthCalendarUnit | NSDayCalendarUnit |NSHourCalendarUnit|NSMinuteCalendarUnit;

NSDateComponents *weekdayComponents =
 [gregorian components:(NSDayCalendarUnit | NSWeekdayCalendarUnit) fromDate:today];

这里的 '|' 难道是或者的意思?

阅读 6.2k
4 个回答

这个运算是一种位运算,叫「位或」,即把每一位用或运算运算后得出结果。如

1 | 1 == 1
1 | 0 == 1
0 | 1 == 1
0 | 0 == 0

上面就是或运算,那么「位或」就可以这样(0b开头的数字指二进制表示的数):

0b00000010 | 0b00000001 == 0b00000011
0b00000100 | 0b00000010 | 0b00000001 == 0b00000111

所以可以看到,用「位或」可以用来把一些「1」合到一个数里面,那么这个数就可以用来传递配置了。比如:

#define CONFIG_1 0x01
#define CONFIG_2 0x02
#define CONFIG_3 0x04
#define CONFIG_4 0x08

int do_something(int config) {
    if (config & CONFIG_1) {
        // 做CONFIG_1对应的事情
    }
    if (config & CONFIG_2) {
        // 做CONFIG_2对应的事情
    }
    if (config & CONFIG_3) {
        // 做CONFIG_3对应的事情
    }
    if (config & CONFIG_4) {
        // 做CONFIG_4对应的事情
    }
    ...
}

int main() {
    do_something(CONFIG_1 | CONFIG_3); // 做CONFIG_1和CONFIG_3
    return 0;
}

当然,「位或」不仅仅有这种用法,仅针对楼主的提问,这里使用的就是这种用法。

这是C的位运算,你可以理解成'并且'。即NSYearCalendarUnit| NSMonthCalendarUnit | NSDayCalendarUnit |NSHourCalendarUnit|NSMinuteCalendarUnit 这五个选项都要开启

详细的信息请自行google位运算

应该是“位或”,就是按每个比特位进行“或”运算。

新手上路,请多包涵

|是位运算的 或 在实际运算中,所有不为空的值 都可以当作 1 来运算, 空值 则为 0

logo
101 新手上路
子站问答
访问
宣传栏