1. 三目运算符
语法:表达式1 ? 表达式2 : 表达式3
。表达式1
为真则执行表达式2
,否则执行表达式3
。相比if语句,三目运算符短小简洁,适当使用可以提高代码可读性。
另外,如果三目运算符返回左值,可以继续赋值。
举例
#include <iostream>
using namespace std;
int main ()
{
system("chcp 65001"); // 避免终端显示中文乱码
int num1 = 10;
int num2 = 20;
int max = 0;
cout << "原始num1=" << num1 << " num2=" << num2 << endl;
max = num1 > num2 ? num1 : num2;
cout << "较大数值:" << max << endl;
num1 > num2 ? num1 : num2 = 100; // 左值支持赋值
cout << "重新赋值后num1=" << num1 << " num2=" << num2 << endl;
return 0;
}
2. 位运算
计算机中的数在内存中均以二进制形式存储,而位运算直接操作内存二进制位,因此执行效率非常高。
2.1 常用位运算
以下num
表示十进制下的整数
- 获取第
i
位的数字:(num >> i) & 1
- 置位第
i
位:num |= (1 << i)
- 清零第
i
位:num &= ~(1 << i)
- 把第
i
位取反:num ^= (1 << i)
2.2 使用举例
位运算可以把状态压缩到一个二进制数中,每个bit
表示一种状态。常用的位运算操作可以方便控制每个bit
的状态,优化程序。
比如可以使用一个uint8_t
来表示最多8
个判断状态,根据对应的bit位执行相应的操作,比使用一堆bool
要优雅很多。
#include <iostream>
void checkStatus(uint8_t checkFlag)
{
if (1 & (checkFlag >> 0))
{
std::cout << "bit0为1,执行对应操作" << std::endl;
}
else
{
std::cout << "bit0为0,执行对应操作" << std::endl;
}
if (1 & (checkFlag >> 1))
{
std::cout << "bit1为1,执行对应操作" << std::endl;
}
else
{
std::cout << "bit1为0,执行对应操作" << std::endl;
}
if (1 & (checkFlag >> 2))
{
std::cout << "bit2为1,执行对应操作" << std::endl;
}
else
{
std::cout << "bit2为0,执行对应操作" << std::endl;
}
if (1 & (checkFlag >> 3))
{
std::cout << "bit3为1,执行对应操作" << std::endl;
}
else
{
std::cout << "bit3为0,执行对应操作" << std::endl;
}
}
int main()
{
system("chcp 65001"); // 避免终端显示中文乱码
uint8_t checkFlag = 0b0011;
checkStatus(checkFlag);
return 0;
}
3 数值的表示
不同的数值表示可以让程序更清晰明了,比如位运算常用二进制、十六进制;对无符号、长整型、浮点数用后缀表示更清晰。
#include <iostream>
int main()
{
int num1 = 0xa0;
int num2 = 0b1010;
int num3 = 023;
float num4 = 12.f;
unsigned int num5 = 13u;
long int num6 = 14l;
double num7 = 1.2e3;
printf("num1: 0x%x\n", num1);
printf("num2: 0x%x\n", num2);
printf("num3: 0%o\n", num3);
printf("num4: %.3f\n", num4);
printf("num5: %u\n", num5);
printf("num6: %ld\n", num6);
printf("num7: %.3f\n", num7);
return 0;
}
标签:num1,技巧,num2,int,C++,num,printf,cout
From: https://www.cnblogs.com/wangxinzhi/p/18199357