c++-数据类型
- 整型
- 取值范围与内存溢出
- 浮点型
- 浮点型cout
- setf显示精读
- 浮点数的存储机制(还要再看 )
- 字符型
- 转义字符
- 字符串型 - string
- string与C字符串
- 字符串操作
- bool 类型
- I/O
- cin/cout
- cout控制输出
- endl
整型
- short : 2bytes
- int : 4bytes
- long
- long : long
- char : 1bytes
int num; // 变量声明,开辟一个内存空间
num=1; // 变量赋值
取值范围与内存溢出
可以理解为:取值范围是一个闭环(如果超过范围就按照闭环去取值 )
limits
#include <climits>
宏定义
与数据类型有关的取值范围
浮点型
float 是有效位只有6位或7位(以科学计数法表示的情况下)
声明的时候,尽量使用double类型,编译器默认也是double类型
注意运算时的精读丢失
浮点型cout
默认显示后六位,四舍五入
setf显示精读
double 和 float 显示的精读不一样
cout.setf(ios_base::fixed,ios_base::floatfield);float a=10.0/3.0; // cout默认显示小数点后六位
const float b=1.0E6;
cout<<a*b<<endl; // 显示精读不一样double c=10.0/3.0;
cout<<a*b<<endl; // 显示精读不一样
浮点数的存储机制(还要再看 )
二进制的科学计数法
整数部分和小数部分
小数部分转换成二进制要乘2,然后取整数部分
小数转成二进制:1.xxxx2E3(整数部分一定是1)
见视频
字符型
char ch='M'; // 77
int i=ch; // 77
转义字符
转义字符实际占用一个字节
宽窄字符
宽字符: 存储数据使用固定的字节数量
窄字符:存储数据使用不同的字节数量
字符串型 - string
字符串的定义
#include <string>
using namespace std;int main()
{string s1; // 默认值是空字符""string s2="hello";// 可以进行赋值string s3=s2; // 通过变量赋值// 通过构造的方式定义string s4(5,'s'); // 5个s -> "sssss"
}
string与C字符串
string
字符串对象结尾没有\0
c字符串结尾有\0
string
字符串可以进行赋值 (相当于深拷贝就可以了,相当于是可变对象)
c字符串 指针定义(char*
)可以进行赋值,字符数组(char []
)定义不可以赋值
string
–s.length()
计算长度
c字符串 –strlen()
计算长度
互相转化
// c转strig
#include <string> // length
#include <cstring> // strlen
char *a="hello";
string b;
b=a;
cout<<b<<endl;// string转c
// 注意转化后是const 内容,不能被修改
string s1="hello";
const char *s2=s1.c_str();
字符串操作
- 索引
使用索引访问
s[idx]
- 拼接
+
使用c++运算符重载的方式,不用担心内存溢出
string类型、c字符串类型(数组、指针)、字符,都可以进行拼接
string s1="hello";
string s2="world";
char *s3="qt";
char s4[]="mfc";
char c5='@';string dst1=s1+s2;
string dst2=s1+s3;
string dst3=s1+s4;
string dst4=s1+c5;cout<<dst1<<endl;
cout<<dst2<<endl;
cout<<dst3<<endl;
cout<<dst4<<endl;
- 插入
str.insert(pos,string)
注意第一个参数pos可能会越界
string s1="hello";
s1.insert(3,"world");
cout<<s1<<endl;
- 删除
str.erase(pos,len)
,不指明len则删除到结尾
pos越界会异常,len越界会到结尾
string s1="hello";
s1.insert(3,"world");
cout<<s1<<endl;
s1.erase(3,5);
cout<<s1<<endl;
- 提取子串
str.substr(pos,len)
pos越界会异常,len越界会到结尾
string s1="hello";
s1.insert(3,"world");
cout<<s1<<endl;string s5=s1.substr(3,5);
cout<<s5<<endl;
- 查找
str1.find(str2,start_pos)
从str1的(下标)start_pos开始查找
str1.find(str2,end_pos)
最多找到str1的下标(end_pos)
int idx=str1.find(str2,start_pos)
int idx2=str1.rfind(str2,end_pos)
- 其他函数
str.append()
str.at()
str.find_first_of() // 查找共同字符的索引
bool 类型
c 语言一般没有bool类型
#include <stdbool.h>
bool flag=true;
c++ 直接支持bool类型数据
注意: cout bool类型还是0、1
I/O
cin/cout
相当于数据流
cin
istream
类对象,cin
对于输入的内存时根据数据类型进行判断的
cout
ostream
类对象,<<
表示把字符串发送给cout
,表示插入运算符,即把字符串插入到输出流当中
属于内置对象
注意:编译器会根据上下文,判断被重载的运算符的含义
#include <iostream>
int x;
float y;
cin>>x;// 连续接收数据
cin>>x>>y;// endl
cout<<x<<endl; // 等价于\n
cout<<x<<"\n";
cout控制输出
cout 输出的默认是以10进制显示
cout<<hex; // 以十六进制显示
cout<<data<<endl;// cout<<oct // 以八进制显示
endl
endl
是一个特殊的c++符号
将endl
插入到输出流中,将导致屏幕光标移动到下一行的开头
cout<<endl;
endl
与\n
cout<<"some str\n";// 等价于
cout<<"some str" <<endl;//等价于
cout<<"some str";
cout<<endl;