位运算的一些笔记

最近做每日一题,大神用位运算秀的操作,真的是秀我一脸,为此我特地做了位运算的小笔记,以供日后参考。😋!
运算符次序问题:C++运算符优先级
有大佬的话,给补充下呀!😉

(一)概念

按位与(&):两数对应位均为1,结果为1,其他为0
按位或(|):两数对应位均为0,结果为0,其他为1
按位异或(^):两数对应位同0异1
按位取反(~):所有位上,1变0, 0变1
左移(<<):运算时,所有1往左移,空出的位补0。计算m 乘 2的n次方很方便,m << n
右移(>>):运算时,所有1往右移,空出的位补符号位。同理,m 除 2的n次方很方便,m >> n

注意:计算机运算是以二进制进行,相比普通加减乘除,用位运算应该可以快一丢丢。

(二)用法

(1)整数取余(按2 ^ n)

m & ((1 << n) - 1); //m 按2 ^ n取余,外侧括号可省略,内侧括号不可省略

因为2的次方的二进制表示为1000…,所以m中对应位后面不为0的都是余数,通过按位与运算可以取余。

(2)判定整数奇偶性

二进制逢二进位,所以最后一位决定了这个数的奇偶性,直接按位与1就可以判断这个数的奇偶性。

bool isOdd(int num)
{
	return num & 1 == 1;//奇数时为1,偶数时为0
}

(3)交换两个整数(不使用临时变量)

//交换a,b
a = a ^ b;
b = b ^ a;
a = a ^ b;
//或者用这个
a ^= b ^= a ^= b;//可读性不好,但有点帅hh

目前我能碰到和用到的,暂时就是这些,如果有碰到大佬们的骚操作,再补充!😏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值