iOS开发-位运算基础

本文介绍了位运算的基础知识,包括原码、反码、补码的概念和运算,以及位运算符的使用。讨论了位运算在色彩存储、算法优化等方面的应用,并举例说明其在iOS开发中的实际运用,如在处理像素颜色和权限管理中的作用。
摘要由CSDN通过智能技术生成

前言

现代计算机只有0/1状态,计算机中所有的数据按照具体的编码格式以二进制的形式存储在设备中。

直接操作这些二进制数据的位数据就是位运算,位运算是一种极为高效乃至可以说最为高效的计算方式,虽然现代程序开发中编译器已经为我们做了大量的优化,但是理解并合理的使用位运算可以提高代码的可读性以及执行效率。

原码

原码规定数值最高位为符号位,正数符号位为0,负数符号位为1(0有两种表示:+0和-0),其余位表示数值的大小。

例如,11的原码为00001011,-11的原码就是10001011。

原码不能直接参加运算,可能会出错。例如数学上,1+(-1)=0,而在二进制中00000001+10000001=10000010,换算成十进制为-2,显然出错了。因此原码的符号位不能直接参与运算,必须和其他位分开,这就增加了开销和复杂性。

反码

反码通常是用来由原码求补码或者由补码求原码的过渡码。

正数的反码和原码相同。

负数的反码就是原码符号位除外,其他位按位取反。

补码

在计算机系统中,数值一律用补码来表示和存储。因为使用补码可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。

正数的补码与原码相同。

负数的补码,将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1,即为负数的反码加1。

已知一个数的补码求原码,其实就是对该补码再求补码,因为原码和补码互为补数。

如果需要深入了解补码的原理:简析二进制补码原理:补码 = 反码 + 1?

基础运算

加法运算

两个二进制整数相加时,是位对位处理的,从最低的一对位(右边)开始,依序将每一对位进行加法运算。两个二进制数字相加,有四种结果,如下所示:
 

0 + 0 = 0 0 + 1 = 1
1 + 0 = 1  1 + 1 = 10

1与1相加的结果是二进制的10(十进制的 2)。多出来的数字会向更高位产生一个进位。

  0 0 0 0 0 1 0 0  4
+ 0 0 0 0 0 1 1 1  7
---------------------
  0 0 0 0 1 0 1 1  11

当有负数相加时(也就是减法),需要先把负数转为补码,再相加。例如2+(-10)=-8。

       原码        反码        补码
+1   00000010    00000010    00000010
-1   10001010    11110101    11110110

  0 0 0 0 0 0 1 0
+ 1 1 1 1 0 1 1 0
------------------
  1 1 1 1 1 0 0 0   -->结果为-8的补码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值