zoukankan      html  css  js  c++  java
  • C/C++拾遗(四)

    运算符问题

    int main()
    {
        unsigned char a = 0xA5;
        unsigned char b = ~a>>4+1;
        printf("b = %d
    ",b);
        return 0;
    }

    这个是面试宝典上的一个题,马上要面试了重新复习下基础知识。

    答案是250.

    流程是这个样子的:a先进行整形提升变成0x000000A5-------->进行取反0xFFFFFF5A------->由于“+”的优先级高于>>,所以直接右移5位  ----->   0x07FFFFFA   ----->截断成1个字节0xFA,即250

    这里要注意的是运算符的优先级:特殊符号>单目操作符>双目操作符>三目操作符>赋值操作符>逗号操作符

    除了双目操作符是自左向右结合外,其他都是自右向左。双目操作符中的几个优先级:数移关逻


    再谈const

    在C++中,一个const的类对象,只能调用类内的const方法;类内的const方法不能改变类内的成员变量。但是在成员变量中加入“mutable”,就可以修改了,代码如下:

    class C
    {
    public:
        C(int i) : m_Count(i){}
        int incr()const
        {
            return ++m_Count;
        }
        int decr()const
        {
            return --m_Count;
        }
    private:
        mutable int m_Count;
    };
    
    int main()
    {
        C c1(0), c2(10);
        for(int tmp, i = 0; i < 10; i++)
        {
            tmp = c1.incr();
            cout<<setw(tmp)<<setfill(' ')<<tmp<<endl;
            tmp = c2.decr();
            cout<<setw(tmp)<<setfill(' ')<<tmp<<endl;
        }return 0;
    }

    字节对齐

    字节对齐谈过很多遍了,这里再记录一下,主要有两个标准:

    • 结构中每个数据成员都小于处理器的位数时,便以结构中最长的元素作为对齐单位,也就是说结构体的长度一定是最长数据元素的整数倍
    • 如果结构体内存在长度大于处理器位数的元素,那么就以处理器位数为对齐单位

    在VC中,我们可以用pack预处理指令来禁止对齐调整,使得结构更加紧凑,通常用在要直接写入文件或者通过网络传输时节省空间。

     http://www.cppblog.com/snailcong/archive/2009/03/16/76705.html


    一段程序

    class A
    {
    public:
        A(){m_a = 1; m_b = 2;}
        ~A(){}
        void fun(){printf("%d%d", m_a, m_b);}
    private:
        int m_a;
        int m_b;
    };
    class B
    {
    public:
        B(){m_c = 3;}
        ~B();
        void fun(){printf("%d", m_c);}
    private:
        int m_c;
    };
    
    int main()
    {
        A a;
        B *pb = (B*)&a;
        pb->fun();
        system("pause");
        return 0;
    }

    这里的pb是指向B对象的指针,只影响对方法的查找。

  • 相关阅读:
    python多线程编程(6): 队列同步
    Python验证Url地址的正则表达式
    centos下redis安全配置相关
    redis
    mysql安装 配置
    centos7安装python3 环境变量配置 django安装 以及tab补全功能
    saltstack 与常用服务部署
    vim
    Linux系统基础优化及常用命令
    Shell 基本命令
  • 原文地址:https://www.cnblogs.com/7ants/p/3263533.html
Copyright © 2011-2022 走看看