• C++中的快读和快写


    快读原理

    单个字符的读入速度要比读入数字快,因此我们以字符的形式先读入,然后处理计算转为数字。

    代码

    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');
    }
    
  • 相关阅读:
    http协议及工作原理
    前端中的安全问题
    JS中的splice slice concat关于字符串,数组的处理
    git stash缓存
    Node学习心得
    uni-app中的TypeError: Cannot read property 'name' of undefined
    js 中Object.keys()返回string类型的索引
    JS中sort()方法,用于排序
    JS中JSON传值
    JS encodeURI()
  • 原文地址:https://www.cnblogs.com/coderzjz/p/12680897.html
Copyright © 2020-2023  润新知