美文网首页
位运算>>与按位与&运算符在应用中的详解

位运算>>与按位与&运算符在应用中的详解

作者: 平谦 | 来源:发表于2017-05-05 15:15 被阅读495次

工作中遇到这样的API:

/**
 * 用一个24位的整数生成UIColor
 * 这个方法实现如下,只会返回不透明的颜色
   return [UIColor colorWithRed:((rgb & 0xFF0000) >> 16) / 255.0f
      green:((rgb & 0xFF00) >> 8) / 255.0f
      blue:((rgb & 0xFF)) / 255.0f
      alpha:1.0f];
 * @param rgb 形如0xRRGGBB
 */
+ (UIColor *)colorWithRGB:(int)rgb;

首先,理解进制数据前缀:
0x或者0X是16进制的数字前缀,HEX也表示16进制,比方说hexString是#FF00AA,0d表示十进制,0表示八进制,0b或者0B是二进制的数字的前缀。

232DB3AAB0C890113FBD474EAEF66D95.png

其次 理解运算符的按位与运算 :&。
按位与运算是以其功能是参与运算的两数各对应的二进位相与。只要对应的二个二进位都为1时,结果位就为1。参与运算的两个数均以补码出现。关于补码的介绍在这里:传送门,该运算是讲每一位(例子中的十六进制)转换成二进制,然后按位与,将结果再转换成十六进制。例如0xAABBCC & 0xFF0000 ,A与F进行按位与运算,A转换成二进制是00000110 F转成二进制是00001111 所以A&F就是00000110 & 00001111 等于00000110,再转成十六进制就是A,所以A&F=A。

最后 需要理解位运算符>>
为什么每一个数字转换成二进制都是八位?(待完善)

当0xAABBCC & 0xFF0000得到结果是0xAA0000之后,为了取到AA这两位数的值,我们需要将0xAA0000的AA取出来,最简单的取出方式是位运算,每一个十六进制的数字占4位,所以需要向右平移4个4位,也就是>>16 ,因此最后求得HexString中前两个关于红色的描述FF.
取得其中关于绿色的描述也是同理:((rgb & 0xFF00) >> 8.

相关文章

  • 位运算>>与按位与&运算符在应用中的详解

    工作中遇到这样的API: 首先,理解进制数据前缀:0x或者0X是16进制的数字前缀,HEX也表示16进制,比方说h...

  • 基础运算符

    [使1. 按位与运算符(&](#1. 按位与运算符(&)[按位或运算符 | ](#2. 按位或运算符(|)) 1....

  • 位运算

    运算符含义&按位与|按位或^按位异或~取反<<左位移>>右位移 按位与运算符(&)按位与运算将两个运算分量的对应位...

  • 理解C语言位运算符

    位运算符 位运算符包括:& 、|、^、~、<<、>> 分析 & 按位与操作,按二进制位进行"与"运算。| 按位或运...

  • 高级运算符

    1:位运算 1.1:按位取反运算符(~) 例子 1.2:按位与运算符 例子 1.3:按位或运算符 例子 1.4:按...

  • js 中位运算的应用

    按位运算符有6个: 按位与 & 按位或 | 按位异或 ^ 取反 ~ 右移 >> 左移 << 应用...

  • iOS "& 按位与" "

    & 按位与| 按位或^ 按位异或 按位与运算 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位...

  • 高级运算符(Advanced Operators)

    目录 [toc] 位运算符 1. 按位取反运算符~ 2. 按位与运算符& 3. 按位或运算符| 4. 按位异或运算...

  • C语言-按位逻辑运算符和位移运算符

    按位逻辑运算符 按位与运算符(bitwise AND operator) a & b 按位计算a和b的逻辑与; 按...

  • C、数据结构知识点

    1. 位运算符有: &(按位与)、|(按位或)、^(按位异或)、~ (按位取反)。 其中,按位取反运算符是单目运算...

网友评论

      本文标题:位运算>>与按位与&运算符在应用中的详解

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