计算机位运算

1.补码

1.对于无符号的整形,直接表示就行
2.对于有符号的整形,当最高位表示0(非负数)时,编码C直接看成无符号整数S。当最高位为1(负数)的时候该编码取反得到的编码~C的数值为-1-S。
3.任意两种类型的数值进行运算的时候都是按照32最高位不进位的加减法运算

反码

就是直接把C的每一位取反表示-C,绝对值相差1

一个实用的常数

0x3f3f3f3f,*2不超过int的最大范围

算数右移

把数字同时向右移动,高位以符号位填充,地位越界后舍弃,

位数

一个数b在二进制下有k位,那么k=$\lceil\log_2{(b+1)}\rceil$

检测位

第0~k-1位$n&((1«k)-1)$ 对2进制下k位赋值0$n&(~(1«k))$ 取反:$n xor (1«k)$