神奇的位运算

一. 英文字母大小写转换

  1. 利用或操作 | 和空格将英文字符转换为小写。
    ('a' | ' ') = 'a'
    ('A' | ' ') = 'a'

  2. 利用与操作 & 和下划线将英文字符转换为大写。
    ('b' & '') = 'B'
    ('B' & '
    ') = 'B'

  3. 利用异或操作 ^ 和空格进行英文字符大小写互换。
    ('d' ^ ' ') = 'D'
    ('D' ^ ' ') = 'd'

二. 异或交换两个数
int a = 1, b = 2;
a ^= b;
b ^= a;
a ^= b;
此时a = 2,b=1

三. 判断奇偶数
只要根据数的最后一位是 0 还是 1 来决定即可,为 0 就是偶数,为 1 就是奇数
if(0 == (a & 1)) {
//偶数
}

四. 符号交换
交换符号将正数变成负数,负数变成正数
int reversal(int a) {
return ~a + 1;
}
整数取反加1,正好变成其对应的负数(补码表示);负数取反加一,则变为其原码,即正数

五. 求绝对值
整数的绝对值是其本身,负数的绝对值正好可以对其进行取反加一求得,即我们首先判断其符号位(整数右移 31 位得到 ),然后根据符号进行相应的操作int。
int abs(int a) {
int i = a >> 31;
return i == 0 ? a : (~a + 1);
}

你可能感兴趣的:(神奇的位运算)