前言
基本数据类型是学习数据结构和算法
和复合类型
的基础。要烂熟于心。
一.基本数据类型
实数:正数,0,负数
0x1字符
计算机里只能存储二进制
,为了满足字母和文字的需要,诞生了编码规范
。ASCII编码是最早的一种规范。
编程中如果出现了乱码问题
,要从这个问题的本质
思考问题。
0 - 2^8-1(1字节):unsigned char;
-2^8/2 - 2^8/2-1(1字节):char(ascii字符);
-2^16/2 - 2^16/2-1(2字节):wchar_t(宽字节字符);
-2^16/2 - 2^16/2-1 (2字节):char16_t(utf_16字符);
-2^32/2 - 2^32/2-1 (4字节):char32_t(utf_32字符);
#include <iostream>
#include <locale>
using namespace std;
int main(int count, char* argv[], char* env[])
{
setlocale(LC_ALL, "chs");
wchar_t wChar{ L'我' };
char16_t uChar{ u'A' };
char32_t u32Char{ u'A' };
std::wcout << wChar << std::endl;//A
std::cout << wChar << std::endl;//cout没有支持wchar_t,只能输出数字
std::cout << uChar << std::endl;//cout没有支持char16_t,只能输出数字
std::cout << (char)10;
std::cout << u32Char << std::endl;//cout没有支持char32_t,只能输出数字
}
0x2.正数
0-2^16-1(2字节):unsigned short
0-2^32-1(4字节):unsigned int
0-2^32-1(4字节)/64-1(8字节):unsigned long
0-2^64-1(8字节):unsigned long long
0x3.负数
-2^8/2 - 2^8/2-1):short
-2^32/2 - 2^32/2-1:int
-2^32 - 2^32-1(4字节)/64-1(8字节):long
-2^64/2 - 2^64/2-1:long long
0x4.小数(分数)
1.float(4)
2.double(8)
3.long double(8)
#include <iostream>
#include <string>
int main(int count, char* argv[], char* env[])
{
unsigned data = 0x7FD0C347;
printf("%f\r\n", *(float*)&data);
}
应用场景:3D游戏瞬移漏洞,银行漏洞。(未公开漏洞
)
0x5.对和错
0 - 255(1字节):bool。(除0之外
所有值都是true)
二.命名规则和命名规范
- 不能重名
- 不能和C/C++语言里的关键字重名;
- 必须是
字母
或字母和数字
的组合,符号仅_
可以使用; - 名字不能用数字开头;
- 这个
变量名
要能够直观表达你这个名字代表的内容
- 别太长(建议)
三.赋值和运算
#include <iostream>
#include <string>
int main(int count, char* argv[], char* env[])
{
int a = 10;
int s_end = ++a + 5;
int s_end = 5 + a++;
}
四.变量的生命周期
字母代替数字变化的范围
,计算每时每刻都在变化
的数量间的关系。
0x1 就近原则:
0x2 变量在括号内
{}
保持有效
总结
高手不在于你这个招式,在于能够把这种朴实无华的基础
(拳脚)打出伤害。