字面量后缀
字面量后缀(Literal
Suffix)
或称为 字面量修饰符(Literal Modifier)。
详细说明:
作用:
用于指定字面量的具体类型(如
int、long、unsigned等)。
影响编译器如何解释该字面量的存储方式和取值范围。
常见字面量后缀:
后缀
类型
示例
U
unsigned int
42U
L
long
123L
UL
unsigned long
100UL
LL
long long
999LL
ULL
unsigned long long
0xFFFFULL
F
float
3.14F
L
long double
3.14L
C++11 新增的字面量后缀(用户自定义字面量):
C++11 允许用户自定义字面量后缀(User-defined Literals),例如:
constexpr long double operator"" _km(long double...
C++运算符优先级
C++ 运算符优先级表(从高到低)
以下是 C++
运算符的优先级列表,优先级高的运算符先计算。同一行的运算符具有相同的优先级,结合性决定了它们的计算顺序。
最高优先级
作用域解析 ::
从左到右
成员访问、下标、函数调用
成员访问 .和 ->
从左到右
数组下标 []
从左到右
函数调用 ()
从左到右
后置递增/递减 ++``--
从左到右
类型转换 type()``type{}
从左到右
const_cast, dynamic_cast, reinterpret_cast,
static_cast
从左到右
一元运算符
前置递增/递减 ++``--
从右到左
一元加/减 +``-
从右到左
逻辑非 !
从右到左
按位取反 ~
从右到左
取地址 &
从右到左
解引用 *
从右到左
sizeof
从右到左
new,...
C++中位运算常用函数
在 C++ 中,位运算(Bit
Manipulation)常用于高效处理二进制数据、优化计算或实现特定算法。以下是常用的位运算函数和操作:
1. 基本位运算符
运算符
含义
示例
&
按位与
a & b
\|
按位或
a \| b
^
按位异或
a ^ b
~
按位取反
~a
<<
左移(乘以 2ⁿ)
a << n
>>
右移(除以 2ⁿ)
a >> n
2. C++20
<bit>头文件提供的位操作函数
C++20 引入了
<bit>头文件,提供了一些高效的位运算函数:
(1)
std::popcount- 计算 1 的个数
#include <bit>unsigned int count = std::popcount(0b10101010); // 返回 4
(2)
std::has_single_bit- 检查是否是 2...
Linux内置函数
在 Linux(或更准确地说,在 GCC/Clang
编译器)中,提供了一些内置函数(Built-in
Functions),用于高效执行底层操作(如位运算、原子操作、CPU
指令优化等)。这些函数通常直接映射到特定的 CPU 指令,性能极高。
1. 位操作相关内置函数
(1) 计算
1的个数(Population Count)
int __builtin_popcount(unsigned int x); // 计算 32 位整数的 1 的个数int __builtin_popcountll(unsigned long long x); // 计算 64 位整数的 1 的个数
示例:
#include <iostream>int main() { int num = 0b1101; // 二进制 1101(十进制 13) std::cout << __builtin_popcount(num); // 输出 3 return 0;}
底层指令:POPCNT(现代 CPU...
C++计算int中1的个数
在 C++ 中,计算一个 int整数的二进制表示中
1的个数(也称为 Population Count 或
Hamming Weight)有多种方法。以下是几种常见的方法:
方法
1:逐位检查(循环移位法)
int countOnes(int num) { int count = 0; for (int i = 0; i < 32; ++i) { if (num & (1 << i)) { count++; } } return count;}
说明:
遍历整数的每一位(共 32 位)。
使用 1 << i生成掩码,检查该位是否为
1。
优点:简单直观,适用于所有整数。
缺点:循环次数固定为 32 次,效率较低。
方法 2:Brian
Kernighan 算法(优化版)
int countOnes(int num) { int...
C++判断质数
C++ 判断质数的实现与优化
质数是指大于1的自然数,除了1和它本身外,不能被其他自然数整除的数。以下是几种C++判断质数的方法及其优化方案。
基础实现方法
1. 简单判断法(时间复杂度O(n))
bool isPrime(int n) { if (n <= 1) return false; for (int i = 2; i < n; i++) { if (n % i == 0) { return false; } } return true;}
2. 优化判断法(时间复杂度O(√n))
bool isPrime(int n) { if (n <= 1) return false; for (int i = 2; i * i <= n; i++) { if (n % i == 0) { ...
常见算法的空间复杂度和时间复杂度
以下是常见算法的时间复杂度和空间复杂度总结,按算法类型分类,并附典型示例:
一、排序算法
算法
平均时间复杂度
最坏时间复杂度
空间复杂度
是否稳定
冒泡排序
O(n²)
O(n²)
O(1)
是
选择排序
O(n²)
O(n²)
O(1)
否
插入排序
O(n²)
O(n²)
O(1)
是
快速排序
O(n log n)
O(n²)
O(log n)
否
归并排序
O(n log n)
O(n log n)
O(n)
是
堆排序
O(n log n)
O(n log n)
O(1)
否
计数排序
O(n + k)
O(n + k)
O(n + k)
是
桶排序
O(n + k)
O(n²)
O(n + k)
是
基数排序
O(n × k)
O(n × k)
O(n +...
C++20的ranges::命名空间
在 C++20 中,<algorithm>头文件中的许多算法被引入了
std::ranges命名空间,这些算法支持范围(Range)概念,提供了更现代、更安全的接口。以下是
C++20 std::ranges中主要的算法分类和示例:
1.
不修改序列的算法(Non-modifying)
查找类:
ranges::find/ ranges::find_if/
ranges::find_if_not
ranges::find_first_of
ranges::adjacent_find
ranges::search/ ranges::search_n
ranges::find_end
ranges::binary_search(需范围有序)
ranges::lower_bound/ ranges::upper_bound/
ranges::equal_range(需范围有序)
计数类:
ranges::count/...
Linux基本命令
1. 查CPU和IP命令
查CPU信息:
lscpu # 查看CPU架构信息cat /proc/cpuinfo # 详细CPU信息
查IP地址:
ip a # 推荐(新版)ifconfig # 旧版(需安装net-tools)hostname -I # 仅显示IP
2. 常用Linux命令分类
文件操作:ls, cp,
mv, rm, chmod
文本处理:cat, grep,
sed, awk, head/tail
系统监控:top, ps,
free, df, netstat
权限管理:chown, chmod,
sudo
网络工具:ping, curl,
wget, ssh
3.
cp和chmod 777含义
cp:复制文件/目录
cp file1 file2 # 复制文件cp -r dir1 dir2 # 递归复制目录
chmod...
C++求最大公约数
C++
求最大公约数(GCD)的方法详解
最大公约数(Greatest Common
Divisor,GCD)是指能够整除两个或多个整数的最大正整数。以下是几种在C++中求最大公约数的方法:
1. 辗转相除法(欧几里得算法)
这是最经典高效的求 GCD 算法,基于以下原理: \[
gcd(a, b) = gcd(b, a \% b)
\]
#include <iostream>// 递归实现int gcd_recursive(int a, int b) { if (b == 0) return a; return gcd_recursive(b, a % b);}// 迭代实现int gcd_iterative(int a, int b) { while (b != 0) { int temp = b; b = a % b; a = temp; } return a;}int main() { ...