位运算
求整数x的二进制里有多少个一
令x=(x-1)&x,直到x变为0。
原理:x&(x-1)会把x的二进制中最后一个1变为0.
整数取模
整数x和2^n的模:
x&(2^n-1)
原理:(2^n-1)的二进制是n个1,和x进行与运算,会保留x的二进制的后n位
补码
计算机中的有符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理 。减一个数等于加这个数的补码。
(1)在补码表示中,最高位(符号位)表示数的正负,在形式上与原码相同,即 0正 1负。但补码的符号位是数值的一部分,由补码定义式计算而得。
(2)在补码表示中,数 0只有一种表示,[+0]补 =[-0]补 =0.000……0
原码求补码
(1)正整数的补码是其二进制表示,与原码相同。
(2)求负整数的补码,将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1。
补码求原码
已知一个数的补码,求原码的操作其实就是对该补码再求补码:
⑴如果补码的符号位为“0”,表示是一个正数,其原码就是补码。
⑵如果补码的符号位为“1”,表示是一个负数,那么求给定的这个补码的补码就是要求的原码。