位运算
1.知识
bit 是度量信息的单位,包含0和1两种状态。计算机的各种运算最后无不归结为一个个bit的变化。
-
符号 含义 & 与 | 或 ~ 按位取反 ^ 异或 >> 右移(算术右移,高位补符号) << 左移(算术左移,低位补0) 按位取反举例
补码的补码就是原码,在计算机中存储全是补码,
十进制数1的二进制补码为:00000001
取反后补码为:11111110
求这个补码的原码:10000010(屏幕上显示都是原码-2) 所以1取反后等于-2在补码下,每个数值都有唯一的表示方式,并且任意两个数值做加减法运算,都等价于在32位补码下做最高位不进位的二进制加减法运算。发生算术溢出时,相当于自动对2^32^取模。所以要注意两个大整数相加有可能是负数。
例题1
求a的b次方对p取模的值,其中1<=a,b,p<=10^9^. (POJ1995 raising modulo numbers)
每个正整数可以唯一表示为若干指数不重复的2的次幂的和。也就是说如果b在二进制表示下有k位,其中第i位的数字是c~i~,那么:
b=c~k-1~2^k-1^+c~k-2~2^k-2^+ ... +c~0~2^0^
则:$ a^b = a^{c_{k-1}*2^{k-1}}*a^{c_{k-2}*2^{k-2}}*...*a^{