举例说明OC中的位运算

作者: 结局怎么写 | 来源:发表于2016-04-23 17:17 被阅读1220次

OC中的位运算和C/C++语言的位运算是一样的。一般有 &(按位与),| (按位或),~ (按位取反),<<(左移) ,>>(右移),^(异或)以及 &= (按位与然后赋值),|= (按位或然后赋值)等
对枚举类型的操作中常常会见到。
例如定义一个季节SeasonType的枚举,有春夏秋冬四个值。

typedef NS_OPTIONS(NSInteger, SeasonType) {
    //bitmask (位掩码):1111
    SeasonSpring        = 1 << 0,   //春天    0001  '<<'左移运算
    SeasonSummer        = 1 << 1,   //夏天    0010
    SeasomAutumn        = 1 << 2,   //秋天    0100
    SeasonWinter        = 1 << 3,   //冬天    1000
};

你可以执行下面的操作

//定义一个SeasonType表示春夏两个季节
SeasonType seasonType =  SeasonSpring | SeasonSummer;
//对应的进行按位或运算seasonType = 0001 | 0010 = 0011 

//添加冬季
seasonType = seasonType | SeasonWinter;
或者
seasonType  |= SeasonWinter;
//对应的进行按位或运算seasonType = 0011 | 1000 = 1011
//此时seasonType同时表示了三种枚举分别是春、夏、冬

//如果再把冬季去掉可以这样
seasonType = seasonType & ~SeasonWinter;
或者
seasonType &= ~SeasonWinter;
//对应的运算为 seasonType = 1011 & (~1000) = 1011 & 0111 = 0011;
//此时seasonType又只表示了春夏两个季节。

位运符之间的优先级顺序(从高到低)为:

1  ~
2  <<、>>
3  &
4  ^
5  |
6  &=、^=、|=、<<=、>>=

关于异或运算我想到一个题

如何不借助第三个变量(中间变量),来交换两个数的值

此时就可以用位运算中的异或(按位对比,相同取0,不同取1)来解决

//定义a, b
int a = 1, b = 2;
// a = 0001 , b = 0010
//经过三步就可以交换a,b的值
a = a ^ b;  // a = 0001 ^ 0010 = 0011
b = a ^ b;  // b = 0011 ^ 0010 = 0001
a = a ^ b;  //  a = 0011 ^ 0001 = 0010
//交换成功
//简写的话是这样
//a ^= b;
//b ^= a;
//a ^= b;
//即a = a ^ b 等价于a ^= b

相关文章

  • 举例说明OC中的位运算

    OC中的位运算和C/C++语言的位运算是一样的。一般有 &(按位与),| (按位或),~ (按位取反),<<(左移...

  • OC中的位运算

    OC中的位运算和C/C++里的是一样的,&(按位与),| (按位或),~ (按位取反),<<(左移) ,>>(右移...

  • swift中的枚举使用问题

    在OC中,当遇到可以进行位运算的枚举值时,可以使用|(或运算符组合多个枚举值) 比如这种类型NSStringDra...

  • OC中的数据类型和运算符

    参考文档: OC中的数据类型和运算符

  • 位运算

    最近想看看位运算这块 一般情况下不使用这块的只是但是用到了要知道 先说一下我所知道的运算符号 在oc 中和 c 中...

  • 05-Dart语言基础-基础运算

    Dart中的运算和其它语言大同小异,大部分与C/OC相差不大,部分与Swift中的运算符类似。 1.基础的算术运算...

  • From Objective-C to Ruby(2)-数据类型

    两者对比 数字 四则运算 OC: ruby: OC中NSNumber不具有四则运算的方法,所以可以使用C语言的四则...

  • 嵌入式C语言的位运算

    想必大家都了解&&(且运算符),||(或运算符),在C语言的位运算中 ,位或运算|,位与运算&,异或^,取反~。等...

  • 2019-03-19 计算机二级C语言程序设计之位运算

    位运算符的运算功能 按位取反 运算符~是位运算中唯一的一个单目运算符,运算对象置于运算符的右边,其运算功能是把运算...

  • Java 中的位运算

    预备知识 原码 : 符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值。 反码 : 正数的反码是其本身;...

网友评论

本文标题:举例说明OC中的位运算

本文链接:https://www.haomeiwen.com/subject/ojaxrttx.html