谈起c++那就一定得谈数据类型
char , short , int , long , float , double ,
unsigned int , unsigned float , unsigned double , unsigned long,
还有指针类型
char* , int* , float* ...
当然还有程序入口 int main 函数
一天,你逐渐发现九宫格游戏,只是单纯的摆放小棒 也太无趣了
你在思索能不能让这些小棒表示我们人类的文字、数字...
于是新的规则出现了
你引入了一个新的东西 叫变量
变量 就是九宫格小格子标号的另一个名字
(变量 就是内存地址的另一个名字)
是的你放弃了直接指定存放的小格子标号
存放的位置你让白虎自己决定了
你为了让小棒表示人类文字又颁布了ASCII 编码
随后
char 这个定义变量的关键字出现了
你在纸条上写 char a;
就代表 a这个变量 所占格子数是一个小格子。
就这样 你可以使用小棒让白虎表示人类文字了
白虎并不知晓人类文字 它只知道根据 指令和小格子里摆放的小棒去对照你所写的ASCII 编码
然后对应编码表上面的人类文字
随着游戏的进行 你发现 一个小格子能表示的东西太少了,而且究竟是表示数字还是文字 是混淆的
你开始想能不能让变量使用多个格子表示一个东西呢
就这样新的规则出现了
数据类型的概念出现了
数据类型 将不同或相同的格子数中的小棒 代表不同的东西 如 文字、数字
0100 0001 b 对照ASCII 编码 这个表示 A
但是如果引入数据类型 让它表示整数 那就代表 65
这样你就可以表示很多东西了 不会混淆
于是数据类型关键字出现了
char 字符型 一个字节数(一个格子数)
short 短整数型 两个字节数(两个格子数)
int 整数型 四个字节数(四个格子数)
long 长整数型 四个字节数(四个格子数)
float 浮点数型 四个字节数(四个格子数)浮点数就是小数
double 双精度浮点数型 八个字节数(八个格子数)
指针型
char * 字符指针型 至少是四个字节数(至少四个格子数)具体字节数根据操作系统有关
int * 整数指针型 至少是四个字节数(至少四个格子数)具体字节数根据操作系统有关
等等 数据类型后面加个 * 就是指针型
就这样白虎根据变量名前面的数据类型 将对应的小棒放入九宫格中的空余的小格子中
游戏继续运行了下去 时间一久你似乎发现了一个问题
白虎根据你递交的指令纸条 从上到下逐渐阅读 但是随着纸条的增加
在一次纸条弄乱的情况下 白虎找不到应该从哪个位置开始阅读了 就这样你们的
游戏bug不断 经常因为纸条弄乱闹得不可开交
因此新的规则
指令开始的入口由一个 main()函数开始
main() 函数定义
int main()
{
写指令的地方
return 0;
}
就这样 不管纸条的多少 你们的游戏都可以正常的运行
因为数字是有正负的 所以你规定了默认情况下 代表数字的类型都是有正负的
规定
默认整数类型最高位 为符号位 0为正 1为负
负数的二进制表示是 正数二进制 反码+1 就为负数的二进制
负数的二进制 反码+1 就等于对应正数的二进制
反码
0 b 的反码 1 b
0 b + 1 = 1 b
1 b + 1 = 10 b (因为 1+1 = 2 满2进1)
如 1 和 -1 二进制表示 因为整数型是四个字节
1: 0000 0000 0000 0000 0000 0000 0000 0001 b
-1: 1111 1111 1111 1111 1111 1111 1111 1111 b
这样正数负数就能表示了 但是有时你又不想让一个int型变量有负数
于是新的关键字出现了
unsigned , signed
unsigned 表示无符号 就是最高位不为符号位了(无负数)
signed 表示有符号 最高位为符号位 (有负数)
如 1 和 -1 二进制有符号表示
1: 0000 0000 0000 0000 0000 0000 0000 0001 b
-1: 1111 1111 1111 1111 1111 1111 1111 1111 b
而无符号表示是
1: 0000 0000 0000 0000 0000 0000 0000 0001 b
4,294,967,295 : 1111 1111 1111 1111 1111 1111 1111 1111 b
这就是有符号和无符号的区别
指针型是什么呢
其实就是该变量存放的是格子的标号 也就是内存地址 具体怎么用等后面再说
现在是理论概念
对了还有一个规定
定义变量的规定
数据类型 (空格)变量名(分号)
如 char name; char* name;