1.1 位运算

1. 补码

由于CPU在进行设计的时候只进行了加法器的设计,所以在它只会处理加法操作,那么问题来了如何进行减法操作呢?例如:A-B,我们可以将其看作是A+(-B)的形式。这样在计算机内部就会出现负数的形式,所以就引入了补码的概念,补码就是对数字进行按位取反再加一的操作,补码在计算机中进行储存负数。

2. 移位运算

1. 左移

就是将二进制中的bit位向左移动一位,低位用0进行填充,高位越界后舍弃。

2. 右移

1. 算数右移

就是将二进制中的bit位向右移动一位,高位用符号位进行填充,低位越界后舍弃。值得注意的一点-3>>1=-2, -3/2 = -1,算数右移按照向下取证的观点,除法运算按照向0取证的观点。

2. 逻辑右移

就是将二进制中的bit位向右移动一位,高位用0进行填充,低位越界后舍弃。

3. 二进制状态压缩

将一个长度为m的bool数组用二进制整数的每一bit位来表示并存储的方法。

常用操作:

1. 取出n的第k位bit的数值:n>>k & 1

2. 取出n的0-k位的数值:n & ((1 << k) -1)

3. 将n的第k位进行取反操作:n ^ (1 << k)

4. 将n的第k位赋值成1:n | (1 << k)

5. 将n的第k位赋值成0:n & (~(1<<k))

4. 成对交换

我们对n进行n^1的操作时发现,如果n为奇数这个操作可以转化成与他相邻的偶数,n ^ 1 ^ 1这样可以得到n本身,这样的数字交换称为成对交换。

5. lowbit运算

lowbit(n)表示非负数的最后一位1表示的数值是多少

   

 

 

相关练习:

1. 0101 a^b

2. 0102 64位整数乘法

3. POJ1995 Raising Modulo Numbers

4. 0104 起床困难综合症

5. 0103 最短Hamilton路径

  

 

 

 

 

 

posted @   楓羽  阅读(742)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示