【c++】位运算 | 引用 | 常引用 | cost关键字和常量

本文详细介绍了C++中的位运算,包括与(&)、或(|)、异或(^)、非(~)、左移(<<)和右移(>>)操作,并提供了实例解析。此外,还讲解了引用的概念,如何定义常引用以及常引用和非常引用的转换规则。最后,讨论了const关键字在常量和常量指针中的应用。
摘要由CSDN通过智能技术生成

位运算:

特点:速度非常快,如果能在程序中合理使用将大大提高程序运行速度

& 与:只有两个都是1才是1,否则为0
可以把某些位清0且同时保留其他位不变,也可以用来获取某变量中的一位。
eg:
将int型低8位全置成0,其余位不变:
n = n & 0xffffff00 或者n &= 0xffffff00

如果n是short类型:
n &= 0xff00

如何判断一个int型变量n的第7位(从右往左,0开始数)是否为1?
n& 0x80 == 0x80
0x80 = 1000 0000

| 或:只要有一个是1就是1,否则为0
通常用来将变量中的某些位置1且保持其他位不变
eg:
n |= 0xff
0xff: 1111 1111

^ 异或:不相同为1,相同为0
可以用来将变量中的某些位取反,且保留其他位不变。
异或运算的特点是:

  1. 如果a ^ b = c, 那么就有c ^ b = a以及c ^ a = b(穷举法可证)
    可以用来进行最简单的加密和解密。
  2. 异或运算还能实现不通过临时变量,就能交换两个变量的值:
int a = 5, b = 7;
a = a ^ b;//c = a ^ b
b = b ^ a;//b ^ c = a
a = a ^ b;// c ^ a = b

即实现ab值交换,穷举法可证

eg:
只把后8位取反,前面的其他位不变
n ^= 0xff
对于后8位:1和1异或为0, 0和1异或为1
对于前面的位:1和0异或为1,0和0异或为0

~ 非:0变1, 1变0

<< 左移:a<<b, 将a各二进制全部左移b位后得到的值,左移时,高位丢弃,低位补0,a的值不因运算而改变
左移1位相当于乘2,左移n位相当于乘以2^n。而左移操作比乘法操作快得多。

>> 右移:a>>b, 将a各二进制全部右移b位后得到的值,右移时,低位丢弃,a的值不因运算而改变。对于有符号数,比如long, int, short, char类型变量,往右移时,符号位将一起移动,而且大多数C/C++编译器规定,如果原符号位为1,则右移时高位就补充1,原符号位为0,则右移高位就补充0.
右移n位相当于左操作数除以2^n,并且将结果往小里取整
eg:
-25 >> 4 = -2
-2 >> 4 = -1
18 >> 4 = 1

#include<stdio.h>
int main()
{
   
	int n1 = 15;
	short n2 = -15;
	unsigned short n3 = 0xffe0;
	char c 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值