位运算知识点(7.22笔记)

本文详细介绍了二进制及位运算的基础概念和技术细节,包括补码、反码的概念,位运算的基本操作如左移、右移等,以及如何通过位运算实现高效的数值处理,例如快速翻转特定位的状态或获取数值的某些部分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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&-n
n来判断n是不是2的整数次幂
n&n-1清除n的二进制最右面的1,可以用n&=(n-1)来计算n的二进制有多少个1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值