位运算技巧归纳

1. 位运算基本操作

逻辑运算

a = 1 0 0 1 1
b = 1 1 0 0 1
与运算 &  a & b = 1 0 0 0 1    //都为1时为1,否则为0
或运算 |  a | b = 1 1 0 1 1    //都为0时为0,否则为1
非运算 ~    ~ a = 0 1 1 0 0    //所有位1变成0,0变成1
异或 ^    a ^ b = 0 1 0 1 0    //相同为0,不同为1

移位操作:左移和右移
对于左移,直接丢弃高位,低位补0即可;但是对于右移,丢弃低位,高位应该补什么?此时出现两种右移方式,算术右移和逻辑右移
算术右移:左端补上最高位
逻辑右移:左端直接补0
几乎所有的编译器/机器组合都对有符号数使用算术右移,而程序员编写程序时也都假设机器是这样实现的;对于无符号数,右移必须是逻辑的。

2. 巧妙使用位运算

1. 乘除

int a = 4;
a >> 1;  //a=2
a << 2;  //a=8

2. 交换

void swap (&a,&b){
	a ^= b;
	b^ = a;
	a ^= b;

3. 奇偶校验

if(0==a&1)  //为真则是奇数,为假则是偶数

4. 正负数转换

int reverse(int a){
	return ~a+1;
}

5. 求绝对值

int abs(int a){
	int i = a>>31;                  //根据符号位判断正数还是负数
	return i==0 ? a : (~a+1);       //正数直接输出。负数取反加1
}

优化方法:
int abs(int a){
	int i = a >>31;              //正数则i=0,负数则i为Oxffffffff
	return ((a ^ i)- i);        //与Ox异或相当于取反,再-i其实就是加1

6. 高低位互换

unsigned short a = 34543;   //只适用于无符号数
a = (a >> 8 | a << 8);

7. 统计二进制表示中1的个数

int a = 13
int count = 0;
while(a){  
  a = a & (a - 1);  
  count++;  
}
第一次循环
  a = 1 1 0 1
a-1 = 1 1 0 0  
容易看出低位的1直接没了,a = 1 1 0 0
第二次循环
  a = 1 1 0 0
a-1 = 1 0 1 1
再次消掉低位的1,循环往复即可

3. bitset 使用

头文件 #include

1. 初始化

bitset<16>bits;                                 //0000000000000000
bitset<16>bits(Oxff);                          //1111111111111111
bitset<16>bits(std::string("001100110011"));  //0000001100110011

2. 常用函数

bits.size()                        //位数
bits.none()                       //返回是否没有1
bits.any()                        //返回是否有1
bits.count()                      //返回1的个数
bits.set()                       //全部置1
bits.reset()                    //全部置0
bits.set(p)/bits.reset(p)        //第p+1位置1/0
bits.flip()                   //全部取反
bits.flip(p)                    //第p+1位取反
bits.to_string()                  //返回转换后的字符串
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
运算放大器权威指南》是一本关于运算放大器的权威参考书,旨在帮助读者深入了解运算放大器的原理、设计和应用。本书提供了丰富的理论知识和实际应用案例,使读者能够全面掌握运算放大器的工作原理和设计流程。 本书的内容包括运算放大器的基本概念、基本电路结构、电路设计方法以及典型应用领域。通过对运算放大器的功能、性能参数、频率响应、输入输出特性等方面的全面讲解,读者可以对运算放大器有一个更深入的理解。 此外,本书还介绍了运算放大器的设计流程和设计要点,帮助读者掌握运算放大器的设计方法和技巧。通过实例分析和实际应用案例的展示,读者不仅可以学习到运算放大器的理论知识,还能够了解运算放大器在各个领域中的实际应用。 《运算放大器权威指南》的编写者具有丰富的经验和专业知识,对运算放大器的研究和应用有着深入的了解。他们通过系统地整理、总结和归纳运算放大器的相关知识,为读者提供了一本权威的参考书。 总之,如果你对运算放大器感兴趣,希望了解更多关于运算放大器的知识和应用,那么《运算放大器权威指南》将是一本值得推荐的书籍。无论是对于工程师、学生还是对运算放大器感兴趣的人士,该书都能提供丰富的理论知识和实用的设计方法,使读者能够更好地理解和应用运算放大器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值