最近刚学了swift的高级运算,但是开始对于看到例子中对16进制的的运算是看着一头雾水。
后来我在想一般的与运算是通过二进制运算,那16进制的估计也是通过二进制转换得到的结果。后来进过验算,发现一个规律,他不是直接将16进制转成二进制,因为根本就存储不下,而是通过每个位数的16进制转成二进制,比如说CC6699,转成二进制进行运算是应该是如下(注意:16进制的需要用4位二进制,所以不足4位的用0补齐):
1100 1100 0110 0110 1001 1001
所以在swift中讲到的高级运算符中的一个例子中,
let pink:UInt32=0xCC6699
let redComponent = (pink &0xFF0000) >>16
那么0xCC6699和0xFF0000进行按位与运算就可以转成如下两个进行与运算:
1100 1100 0110 0110 1001 1001
1111 1111 0000 0000 0000 0000
得到的结果应该为:
1100 1100 0000 0000 0000 0000
再将其转成16进制,即为:CC0000
与swift中的列子结果相符。
此算法要是有什么不正确的说法,欢迎大家指正,这只是个人的理解~
网友评论