修改密码

【2024课程】零基础学会C++编程课程

成品课程

陈远龙老师主讲 & 答疑

课程题单 - T1000

未购买 · 可先试学5节课

课程目录展开/折叠

第74课 整数编码和位运算

播放快捷键

播放/暂停:空格(或鼠标单击)      全屏:F(或鼠标双击)      退出全屏:Esc

快进10 / 30 / 60秒:方向键→ / Ctrl + 方向键→ / Shift + 方向键→

快退10 / 30 / 60秒:方向键← / Ctrl + 方向键← / Shift + 方向键←

本节课讲解配套PPT&板书:

本节课讲解到的源代码

源代码下载:第74课 整数编码和位运算-源代码下载

1. 不同进制的表示-1
#include <bits/stdc++.h>
using namespace std;

int main()
{
    int a = 0b1111; // 0b0000....0001111
    cout << a << endl;
    int b = 077;
    cout << b << endl;
    int c = 0xAF;
    cout << c << endl;
    int d = 123;
    cout << d << endl;
    return 0;    
} 
2. 输出不同进制的数-1
#include <bits/stdc++.h>
using namespace std;

int main()
{
    int a = 123;
    cout << a << endl;
    // bitset表示二进制的一个模板类
    cout << bitset<8>(a) << endl;
    cout << bitset<32>(a) << endl;
    cout << bitset<8>(-5) << endl;
    cout << bitset<32>(-5) << endl;
    cout << oct << a << endl;
    cout << dec << a << endl;
    cout << hex << a << endl;
    cout << uppercase << hex << a << endl;
    cout << showbase << uppercase << hex << a << endl;

    return 0;
}
3. 输出不同进制的数-2
#include <bits/stdc++.h>
using namespace std;

int main()
{
    int a = 123;
    printf("%d\n", a);
    printf("%o\n", a);
    printf("%x\n", a);
    printf("%X\n", a);

    return 0;    
} 
4. 有符号数和无符号数-1
#include <bits/stdc++.h>
using namespace std;

int main()
{
    /* 
    int i1 = 0xffffffff; // signed int 有符号整数 
    unsigned int i2 = 0xffffffff; // 无符号数 
    cout << i1 << endl;
    cout << i2 << endl;
    cout << fixed << setprecision(0) << pow(2, 32) - 1 << endl;
    */

    /* 
    // char => 可能是有符号数,也可能是无符号数 
    signed char c1 = 0xff;
    unsigned char c2 = 0xff;
    cout << (int)c1 << endl; // 整型提升的规则  0xff ff ff ff
    cout << (int)c2 << endl; // 0x00 00 00 ff

    */

    // if (4294967295 < 1)
    if (-1U < 1) cout << "yes" << endl;
    else cout << "no" << endl;

    cout << -1U << endl; // (unsigned int)0xff ff ff ff

    return 0;
}
5. 有符号数和无符号数-2
#include <bits/stdc++.h>
using namespace std;

int main()
{
    /*
    cout << INT_MAX << endl; // 0b0111 11....1 => 0x7f ff ff ff
    cout << INT_MIN << endl; // 0b1000 000....0 => 0x80 00 00 00
    */
    int mx = 0x7fffffff;
    cout << mx << endl;
    int mn = 0x80000000;
    cout << mn << endl;

    char mxc = 0x7f;
    char mnc = 0x80;
    cout << (int)mxc << endl;
    cout << (int)mnc << endl;    

    unsigned int umx = 0xffffffff;
    cout << umx << endl;

    return 0;
}
6. 有符号数和无符号数-3
#include <bits/stdc++.h>
using namespace std;

int main()
{
    int mx = 0xffffffff;
    printf("%d\n", mx);
    printf("%u\n", mx);
    cout << mx << endl;
    cout << (unsigned int)mx << endl;

    return 0;    
} 
7. 位运算符-1
#include <bits/stdc++.h>
using namespace std;

int main()
{
    int a = 5, b = 3;  
    // 0..0 0101 
    // 0..0 0011
    // cout << (a & b) << endl;
    cout << bitset<8>(a) << endl;
    cout << bitset<8>(b) << endl;

    cout << bitset<8>(a & b) << endl;
    cout << bitset<8>(a | b) << endl;
    cout << bitset<8>(a ^ b) << endl;
    cout << bitset<8>(~a) << endl;
    cout << bitset<8>(~b) << endl;
    cout << bitset<8>(a << 1) << endl;
    cout << bitset<8>(a >> 1) << endl;
    cout << bitset<8>(b >> 10) << endl;

    return 0;    
} 
8. 位运算符-2
#include <bits/stdc++.h>
using namespace std;

int main()
{
    int a = 1; // 左移n位 x (2^n) 

    cout << (a << 1) << endl;
    cout << (a << 2) << endl;
    cout << (a << 3) << endl;
    cout << (a << 4) << endl;
    cout << (a << 5) << endl;
    cout << (a << 31) << endl;

    int a2 = 10;
    cout << (a2 << 3) << endl;

    int b = 128; // 右移n位,相当于/ (2^n) 
    cout << (b >> 1) << endl;
    cout << (b >> 2) << endl;
    cout << (b >> 3) << endl;
    cout << (b >> 4) << endl;
    cout << (b >> 5) << endl;
    cout << (b >> 6) << endl;
    cout << (b >> 7) << endl;
    cout << (b >> 8) << endl;

    return 0;    
} 
9. 位运算符-3
#include <bits/stdc++.h>
using namespace std;

int main()
{
    int a = 1;
    cout << (a ^ a) << endl;
    cout << (a ^ 0) << endl;

    int b = 2, c = 3;
    cout << (a ^ b) << endl;
    cout << (b ^ a) << endl; 

    return 0;    
} 

本节课答疑

建议大家有问题先通过AI答疑(比如:DeepSeek 等),AI时代需要学会使用AI辅助学习

陈远龙老师视频讲解:如何使用DeepSeek进行答疑?

通过AI未能获得满意解答的,可以联系陈远龙老师答疑

目录