1.补码:补码下每个字符都有唯一的表示方式,并且任意两个数值做加减运算都等于在32位补码下做最高位不进位的二进制加减运算,发生算数溢出时自动对2的32次方取模。
2.补码与反码在负数表示中绝对值差1
3.0x3F3F3F3F:
(1)整数的两倍,不超过0x7FFFFFFF,即int能表示的最大整数
(2)整数的每八位(每个字节)都是相同的
4.初始化正无穷:memset(a,0x3f,sizeof(a))
5.左移:1<<n=2的n次方,n<<1=2n
右移:n>>1=n/2(向下取整、C++中除以2向0取整)
算数右移:在二进制补码表示下把数字同时向右移动,高位以符号位填充,低位越界后弃(默认)
逻辑右移:在二进制补码表示下把数字同时向右移动,高位以0填充,低位越界后舍弃
6.二进制状态压缩:将一个长度为m的bool数组用一个m位二进制整数表示并储存的方法
7.(n>>k)&1:取n二进制第k位
n&((1<<k)-1):取n二进制0~k-1位(后k位)
n xor (1<<k):n二进制第k位取反
n|(1<<k):n二进制第k位赋值为1
n&(~(1<<k)):n二进制第k位赋值为0
8.运算符优先级:+,-(加减) <<,>>(位移) <,>,!=,(比较大小)&(与) xor(C++:^)(位或) |(异或)
9.成对变换:n为非负整数:n为偶数时n xor 1等于n+1
n为奇数时n xor 1等于n-1
“0 1”“2 3”“4 5”…关于xor 1运算构成成对变换
10.lowbit(n):取出非负数n在二进制表示下最低位的1以及它后面的0构成的数值
lowbit(n)=n&(~n+1)=n&(-n)
11. n&-n取得n的二进制最右面的1,可以用n&-nn来判断n是不是2的整数次幂
n&n-1清除n的二进制最右面的1,可以用n&=(n-1)来计算n的二进制有多少个1
位运算知识点(7.22笔记)
最新推荐文章于 2021-11-01 00:09:49 发布