- 编程
C++中的快读和快写
- 2022-12-1 2:44:43 @
-
快读原理
单个字符的读入速度要比读入数字快,因此我们以字符的形式先读入,然后处理计算转为数字。
代码
inline int read(){ register int x = 0, t = 1; register char ch=getchar(); // 读入单个字符到寄存器 while(ch<'0'||ch>'9'){ if(ch=='-') t=-1; ch=getchar(); } while(ch>='0'&&ch<='9'){ x=(x<<1)+(x<<3)+(ch^48); // 移位与异或 // 第十行可以换成 x = x * 10 + ch - '0' ch=getchar(); } return x*t; }
其中涉及到的移位运算、异或、inline、register
位运算、寄存器涉及计算机组成原理
第十行
x=(x<<1)+(x<<3)+(ch^48);
其中 << 为移位 ^ 为异或移位
简单来说移位就是二进制数左移(<<) 或 右移(>>) x位 十进制看来就是乘/除2
其中
x << 1 == x * 2;
x << 3 == x * 2 * 2 * 2;
二者相加也就是 x * 10;位或
就是数学里次方的符号 ^ 也是format中格式居中对齐的符号表示
简单说就是 "同0 异1" 相同的两个数异或为0 不同的异或为1
ch^48
相当于 ch -= '0'inline
简单来说就是类似 #define 但是能更进一步的定义函数 能够提升效率
register
意思是将变量放入寄存器,大幅提升效率
注意 : 读入中包含大量无用空格时 快读不太适用
附 快写代码
inline void write(int x) { if(x<0){ putchar('-'); x=-x; } if(x>9) write(x/10); putchar(x%10+'0'); }
0 条评论
目前还没有评论...