查看: 382|回复: 2

[C/C++] 【教程】位运算小技巧

[复制链接]

0

技术

9

魅力

1

原创

版主

禁止访问

Rank: 7Rank: 7Rank: 7

积分
7734
人气
176
分享
52

最佳新人活跃会员

发表于 2023-8-15 21:29:07 | 显示全部楼层 |阅读模式
众所周知,C语言之所以能够制作操作系统,和C/C++支持位运算有很大的关系
在某些情况下,它还是很好用的

1.使用位运算计算加法
我们在计算加法时,一般会这样写:
[C++] 纯文本查看 复制代码
template <typename T>
T add(T a, T b)
{
    return a+b;
}

这样没毛病,就是有些慢,那我们有没有办法让他更快一些呢?
[C++] 纯文本查看 复制代码
template <typename T>
T add(T a, T b)
{
    return add((a & b) << 1, a ^ b);   
}


这样也是可以的ovo
2.使用位运算交换两个变量的值
一般情况下,我们会这样写
[C++] 纯文本查看 复制代码
template <typename T>
void swap(T &a, T &b)
{
    T temp = a;
    a = b;
    b = temp;
}

我们多用了一个变量temp,占了1-8字节,太浪费了(bushi)
所以我们可以用位运算解决:
[C++] 纯文本查看 复制代码
template <typename T>
void swap(T &a, T &b)
{
    a ^= b;
    b ^= a;
    a ^= b;
}

这样也很nice
3.把数字转成字符
如果我们要把6转化成'6',可以这样写
[C++] 纯文本查看 复制代码
int data = 6;
char ch = data ^ 48; //'6'

4.使用异或代替不等号
[C++] 纯文本查看 复制代码
if (a ^ b){
    //不相等
} else {
    //相等
}

你学费了吗/ww/xyx
小菜鸡一枚~
Gitee主页:https://gitee.com/juruoqwq

1

技术

25

魅力

7

原创

管理员

Rank: 9Rank: 9Rank: 9

积分
11343
人气
297
分享
42

论坛元老优秀版主活跃会员最佳新人灌水之王

发表于 2024-6-5 21:48:06 | 显示全部楼层
上面add位运算的代码递归时没有终止条件,会一直递归而造成Stack overflow,而且用这种递归的方法实现加法不会比直接加更快。
Just do it.

0

技术

9

魅力

1

原创

版主

禁止访问

Rank: 7Rank: 7Rank: 7

积分
7734
人气
176
分享
52

最佳新人活跃会员

 楼主| 发表于 2024-6-8 17:49:06 | 显示全部楼层
skystars 发表于 2024-6-5 21:48
上面add位运算的代码递归时没有终止条件,会一直递归而造成Stack overflow,而且用这种递归的方法实现加法 ...

确实确实,当时真的啥也不会
小菜鸡一枚~
Gitee主页:https://gitee.com/juruoqwq
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表