CPP学习(二)

2019-01-25  本文已影响2人  zoterap

学习点

问题

定义了变量类型为unsigned,为啥还能传递负数进去?
为啥float类型的数据打印的时候,精度丢失?
为啥double类型的数据打印的时候,精度丢失?
使用extern的变量定义,作用是啥?

show me the code

#include <iostream>
/**
 * 引入命名空间
 */
using namespace std;


/**
 * 函数声明
 */
void learn_namespace_and_cout();

void learn_var();

void learn_enum();

/**
 * 全局变量
 */
extern int extern_int;

int main() {
    learn_namespace_and_cout();
    learn_var();
    learn_enum();

    return 0;
}


void learn_namespace_and_cout() {
    /**
     * 打印经典的 hello world
     * 打印 int 类型
     */
    cout << "----------[learn_namespace_and_cout]----------" << endl;
    cout << "hello world" << endl;
    cout << 1 << endl;

}

void learn_var() {
//    类型    长度  范围
//    char  1byte   -127 - 127 或者 0 - 255
//    unsigned char 1byte   0 - 255
//    signed char   1byte   -127 - 127
//    int   4bytes  -2147483648 - 2147483647
//    unsigned int  4bytes  0 - 4294967295
//    signed int    4bytes  -2147483648 - 2147483647
//    short int 2bytes  -32768 - 32767
//    unsigned short int    Range   0 - 65,535
//    signed short int  Range   -32768 - 32767
//    long int  4bytes  -2,147,483,647 - 2,147,483,647
//    signed long int   4bytes  和 long int 一样
//    unsigned long int 4bytes  0 - 4,294,967,295
//    float 4bytes  +/- 3.4e +/- 38 (~7 位数字)
//    double    8bytes  +/- 1.7e +/- 308 (~15 位数字)
//    long double   8bytes  +/- 1.7e +/- 308 (~15 位数字)
//    wchar_t   2 或者 4 bytes    1 个宽字符


    /**
     * C++变量类型
     * 单精度是这样的格式,1位符号,8位指数,23位小数
     * 双精度是1位符号,11位指数,52位小数
     *
     * 当你使用多个文件,并且你自己定义的变量放在其中一个文件里,变量的声明将对程序的链接很有用。
     * 您可以使用 extern 关键字来声明一个放在任何位置的变量。
     *
     * TODO 定义了变量类型为unsigned,为啥还能传递负数进去?
     * TODO 为啥float类型的数据打印的时候,精度丢失?
     * TODO 为啥double类型的数据打印的时候,精度丢失?
     * TODO 使用extern的变量定义,如果值发生变化,是否会全局发生变化?
     *
     *
     */
    cout << "----------[learn_var]----------" << endl;
    char _char = 0;
    cout << _char << endl;
    cout << (int) _char << endl;
    cout << "sizeof:" << sizeof(_char) << endl;

    unsigned char _unsigned_char = -1;
    cout << _unsigned_char << endl;

    cout << "-----[learn_var_float]-----" << endl;
    float _float = 1.1111111111111;
    cout << _float << endl;

    double _double = 1.1111111111111;
    cout << _double << endl;

    float _float_no_initialization;
    cout << _float_no_initialization << endl;

    cout << "-----[learn_extern]-----" << endl;
    int extern_int;
    extern_int = 99;
    cout << extern_int << endl;

    int extern_int_int_01_25 = 1;
    cout << extern_int_int_01_25 << endl;
    
}

void learn_enum() {
    /**
     * 定义枚举
     * 枚举的默认赋值是从0开始的,依次类推
     */
    cout << "----------[learn_enum]----------" << endl;
    enum TEST_ENUM {
        A, B, C = 6, D
    } x;

    cout << A << endl;
    cout << B << endl;
    cout << C << endl;
    x = D;
    cout << x << endl;

}
上一篇下一篇

猜你喜欢

热点阅读