zoukankan      html  css  js  c++  java
  • c++第二十七天

    p135~p140:
    1、位运算符。作用于整数类型的运算对象,并把运算对象看成是二进制的集合,提供检查和设置二进制位的功能。

    2、bitest:一种可表示任意大小的二进制位集合的标准库类型。

    3、关于符号位如何处理没有明确的规定,所以强烈建议将位运算符用于处理无符号类型

    4、移位运算符:对运算对象执行基于二进制位的移动操作。(移向边界的位被舍弃掉

    #include<iostream>
    using std::cout;
    using std::endl;
    int main()
    {
        unsigned int bit1 = 1;    // 00000001
        cout << bit1 << endl;    // 1
        unsigned int bit2 = bit1 << 1;    // 00000010,bit1的值并没有改变
        cout << bit2 << endl;    // 2
        return 0;
    }

    5、位求反运算符。ps:求无符号类型范围的好办法

    #include<iostream>
    using std::cout;
    using std::endl;
    int main()
    {
        unsigned int bit1 = 0;    // 00000000...0
        cout << bit1 << endl;    // 0
        unsigned int bit2 = ~bit1;    // 1111111...1
        cout << bit2 << endl;    // 4294967295
        return 0;
    }

    6、位与,位或,位异或。(相异为1,否则就是0)

    #include<iostream>
    using std::cout;
    using std::endl;
    int main()
    {
        unsigned int bit1 = 1;    // 00000000..01
        cout << bit1 << endl;    // 1
        unsigned int bit2 = 2;    // 00000000..10
        cout << bit2 << endl;    // 2
        unsigned int bit3 = bit1 ^ bit2;    // 00000000..11
        cout << bit3 << endl;
        return 0;
    }

    7、p137课本示例。(修改、查看27号同学的及格情况)

    #include<iostream>
    using std::cout;
    using std::endl;
    int main()
    {
        unsigned long quiz1 = 0;
        // unsigned long类型在任何机器上至少有32位
        quiz1 |= 1UL << 27;    // 1UL是unsigned long类型的整数字面值1
        // 修改为原始值
        quiz1 &= ~(1UL << 27);
        // 检查学生27测试的情况到底怎么样
        bool status = quiz1 & (1UL << 27);
        cout << status << endl;
        return 0;
    }

    p139
    1、sizeof的作用:返回一条表达式或者一个类型名字所占的字节数,返回值类型为size_t

    2、具体用法:sizeof(type)或者sizeof expr

    3、特点:1)满足右结合律。2)不实际求运算对象的值。(因此运算对象可以是解引用无效指针

    4、应用实例:求数组中元素的个数。

    #include<iostream>
    using std::cout;
    int main()
    {
        int ia[] = {1, 2, 3, 4, 5};
        constexpr size_t sz = sizeof(ia)/sizeof(*ia);
        int arr2[sz];    // 正确:sizeof返回一个常量表达式
        cout << sz << std::endl;    // 5
        return 0;
    }

    练习 4.25
    'q':01110001
    ~'q':10001110
    ~'q'<<6:10000000

    练习 4.26


    练习 4.27
    ull = 3 // 000...0000011
    ul2 = 7 // 000...0000111
    a 000...0000011
    b 000...0000111
    c 000...0000001
    d 000...0000001

    练习 4.28

    #include<iostream>
    using std::cout;
    using std::endl;
    int main()
    {
        cout 
        << sizeof(bool) << '
    '
        << sizeof(char) << '
    '
        << sizeof(wchar_t) << '
    '
        << sizeof(char16_t) << '
    '
        << sizeof(char32_t) << '
    '
        << sizeof(short) << '
    '
        << sizeof(int) << '
    '
        << sizeof(long) << '
    '
        << sizeof(long long) << '
    '
        << sizeof(float) << '
    '
        << sizeof(double) << '
    '
        << sizeof(long double) << '
    '
        << endl;
        return 0;
    }
    /* output:
    1
    1
    2
    2
    4
    2
    4
    4
    8
    4
    8
    12
    */

    练习 4.29

    #include<iostream>
    using std::cout;
    using std::endl;
    int main()
    {
        int x[10]; int *p = x;
        cout << sizeof(x)/sizeof(*x) << endl; // 10
        cout << sizeof(p)/sizeof(*p) << endl; // 1
        return 0;
    }

     

    练习 4.30

    a sizeof(x + y)

    b sizeof(p->men[i])

    c (sizeof a) < b

    d sizeof (f())

  • 相关阅读:
    系统调用的三层机制(上)
    深入理解计算机系统——第二章学习笔记
    MenOS
    操作系统工作流程
    从问题到程序——第一二章学习笔记
    2018-2019-1 20189210 《LInux内核原理与分析》第六周作业
    2018-2019-1 20189210 《LInux内核原理与分析》第五周作业
    2018-2019-1 20189210 《LInux内核原理与分析》第四周作业
    2018-2019-1 20189210 《Linux内核原理与分析》第三周作业
    20189210牟健 《Linux内核原理与分析》第二周作业
  • 原文地址:https://www.cnblogs.com/xkxf/p/6504398.html
Copyright © 2011-2022 走看看