神奇的位运算

以下列出我收集的十分神奇而实用的位运算技巧。

1、整数

1.1 设置x的第n位为1

x | (1<<n)

1.2 设置x的第n位为0

x & ~(1<<n)

1.3 将x的第n位取反

x ^ (1<<n)

1.4 得到最大的int

int maxInt = ~(1 << 31);
int maxInt = (1 << 31) - 1;
int maxInt = (1 << -1) - 1;

1.5 得到最小的int

int minInt = 1 << 31;
int minInt = 1 << -1;

1.6 计算n乘以2

n << 1;

1.7 计算n除以2

n >> 1;

1.8 计算n乘以2的m次方

n << m;

1.9 就算n除以2的m次方

n >> m;

1.10 判断a和b是否相等

!(a^b)

1.11 判断n是否为奇数

(n & 1) == 1;

1.12 交换a和b的值

//方式1
a ^= b;
b ^= a;
a ^= b;
//方式2
a = a ^ b ^ (b = a)

1.13 得到x的绝对值

(x ^ (x >> 31)) - (x >> 31);

1.14 得到a和b中较大的数

b & ((a-b) >> 31) | a & (~(a-b) >> 31);

1.15 得到a和b中较小的数

a & ((a-b) >> 31) | b & (~(a-b) >> 31);

1.16 判断a和b是否同正负

(x ^ y) >= 0;

1.17 计算i的相反数

//方式1
i = ~i + 1;
//方式2
i = (i ^ -1) + 1;

1.18 判断n是否为2的若干次方

n > 0 && (n & (n - 1)) == 0;

1.19 拿到x的位于最右的1位

x & (-x)

1.20 拿到x的位于最右的0位

~x & (x+1)

1.21 将x的位于最右的0位设置为1

x | (x+1)

1.22 计算n + 1

-~n

1.23 计算n - 1

~-n

二、字符

2.1 将x转换为小写(如果原来就已经为小写则保持)

x | ' '

2.2 将x转换为大写(如果原来就已经为大写则保持)

x & '_'

2.3 大小写互换

x ^ ' '

2.4 得到x在字母表中的位置(大小写都适用)

x & '\x1F'
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值