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;
}