• c primer plus(2)


    前言

    延续上一讲的内容,今天来写一写这本书的第三章:处理数据

    好吧,本次博客仍然是总结重点内容

    简单变量

    在本书中变量有三个属性

    1信息存储在什么地方

    2要存储什么

    3存储类型

    比如

    1. int braincount;
    2. braincount=5;

    这两行代码体现了这几个属性,首先作为局部变量信息储存在栈区

    存储类型为int整型,存储了一个5

    变量名

    1名称中只能使用字母字符,数字,和下划线

    2名称第一个字符不能是数字

    3不能将c++关键字作为变量名,比如int     auto     long       go     break等等

    整型

    short    int     long   和long long

    这里要补充位与字节的知识

    一字节为8位

    在计算机是以二进制存储信息,而一位可以表示0或一

    那么一个字节可以表示的范围为-128~127(包括0)此时为有符号

    或者是0~255此时是无符号

    一共正好是2的8次方个数字

    继续,1MB=1024KB=1024*1024B

    好吧,依据传统,再来看看各个类型有多少字节

    看代码呗

    1. int main()
    2. {
    3. cout << sizeof(char)<<endl;
    4. cout << sizeof(short)<<endl;
    5. cout << sizeof(int)<<endl;
    6. cout << sizeof(long) << endl;
    7. cout << sizeof(long long)<<endl;
    8. cout << sizeof(float)<<endl;
    9. cout << sizeof(double)<<endl;
    10. return 0;
    11. }

    当然,实际上 short类型是short int的缩写,long是long int 的缩写

    接下来来看各个类型可表示的最大最小值

    climits头文件

    直接看代码

    1. int main()
    2. {
    3. cout << "char所占字节为" << sizeof(char) << "最大值为" << CHAR_MAX << "最小值" << CHAR_MIN<< endl;
    4. cout << "int所占字节为" << sizeof(int) << "最大值为" << INT_MAX << "最小值" << INT_MIN << endl;
    5. cout << "short所占字节为" << sizeof(short) << "最大值为" << SHRT_MAX << "最小值" << SHRT_MIN << endl;
    6. cout << "long long所占字节为" << sizeof(long long) << "最大值为" << LLONG_MAX << "最小值" << LLONG_MIN << endl;
    7. cout << "unsigned int所占字节为" << sizeof(int) << "最大值为" << UINT_MAX << endl;
    8. cout << "unsigned long long所占字节为" << sizeof(long long) << "最大值为" << ULLONG_MAX<< endl;
    9. return 0;
    10. }

    看结果

    值得注意的是,这个大写字母,比如INT_MAX

    它实际上是宏定义,而且在命名是也有特点,首先是全部为大写   类型_最值

    注意无符号数没有最小值这个宏定义

    好吧在这本书中

    把这些符号称为 符号常量

    整形溢出问题

    比如,我们就以char类型为例来说明问题

    大家看char 类型表示的范围为-128~127

    如果一个char类型的数已经是一个127此时再加上一个1,一般就会变成-128

    同理如果一开始是-128再减去一个1,就会变成127

    这个类似与一个环

    当然这本身是错误行为,我们不能出现溢出问题,在c++中是未定义行为,不保证每个编译器都是这个结果

    C语言vs中是这个结果但是c++就出现了错误

    这明显是错误的

    整型字面值

    其实就是进制问题

    和c语言很像,比如int a=0x16;0x表示16进制数,注意0x是数字0不是字母o

    并且x可以大写也可以小写

    那么再看int b=05,此时是八进制数,注意呀最高位为0且除最高位以外没有大于7的数,这时才是八进制

    这个c语言也学了,但还是多写一遍

    上面其实是读取数字,但是默认的情况下,cout输出只会为10进制数

    那么我们可以通过 dec(10进制) hex(16进制) oct(8进制)

    具体就是

    一开始cout为10进制

    cout<之后输出的数变为16进制

    接下来还是看代码实现吧

    1. #include <iostream>
    2. #include <limits>
    3. using namespace std;
    4. int main() {
    5. int a = 0x5F;
    6. int b = 20;
    7. int c = 075;
    8. //十进制数表示
    9. cout << a << " " << b << " " << c << endl;
    10. //16进制表示
    11. cout << hex;
    12. cout << a << " " << b << " " << c << endl;
    13. //8进制表示
    14. cout << oct;
    15. cout << a << " " << b << " " << c << endl;
    16. return 0;
    17. }

    hex oct dec 都是存在于std这个变量空间的

    如果忽略using指令那么就要是用 std ::hex要加上一个std ::前缀

    同类类型转换问题

    首先

    我们的对于一个整型常量来说,它的默认类型为int

    如果小于int,在赋值时会发生截断问题,就只取到当前类型大小的字节数

    如果大于int,就会根据大小重新匹配

    也就是一种类型的转换

    那么,我们可以在数字前面加上一个后缀,就可以减少这种操作

    从而节省时间

    常见的后缀为

    L        UL      ULL分别表示long unsigned long 以及 unsinged long long

    接下来是字符

    char:字符和小整数

    这里的char类型几乎和c语言一样,但是要注意的是有一个

    新的知识点就是,cout.put()函数,其实就是成员函数

    作用就是输出一个字符

    看代码吧

    这是针对于一个字符的不同操作

    成员函数

    接下来这本书就介绍了成员函数的一些概念

    总而言之,可以这么解释

    c++中是面向对象的泛型编程

    对象的属性有两种,1是数据结构 可以理解为结构体

                                     2是自定义函数 可理解为一个一个操作

    那么这本书在这里第一次介绍这个概念,cout.put()

    Ascll表以及转义字符

    对于Ascll表的直接看图就行了

    不过最好记住

    字符a对应数字97 字符A 对应数字65

    字符b对应数字98 字符B对应数字66 等等依次论推

    温馨提示一共有26个字母哟

    那么再来

    字符0对应数字48 字符1对应数字49

    一直到字符9对应数字57 没有字符10 哈哈哈

    温馨提示 \0转义字符对应的数字为0

    不要把数字0与字符0搞错,这些其实非常重要

    还有一个

    \ddd 这里的d表示数字,这里是一个字符,表⽰1~3个⼋进制的数字 

    \xdd 这里的d表示数字,这里同样也是一个字符 表⽰2个⼗六进制数字

    既然是一个字符那么它的数字的值代表的就是对应的ascll值,

    在字符串中,只会把它打印成字符

    其他的转义字符没有太多的必要,看图就行

    字符集

    Unicode 字符集和ISO 10646字符集

    其实这个主要针对国际化编程

    说来说去就是Ascll表示的字符太少啦

    要构建新的字符集,来迎合国际化

    但是这里还是衍生出几种还挺有用的类型

    wchar_t类型

    用来处理宽字符

    其实中文字就是宽字符

    那如何使用呢

    看代码

    1. #include <cwchar>
    2. #include <iostream>
    3. int main() {
    4. // 定义宽字符串
    5. const wchar_t* wstr = L"这是一个宽字符串";
    6. // 打印宽字符串
    7. std::wcout << wstr << std::endl;
    8. // 获取宽字符串长度
    9. std::cout << "Length of the string: " << std::wcslen(wstr) << std::endl;
    10. return 0;
    11. }

    bool类型

    bool类型占一个位的空间,来判断真假性

    true为非0

    false为0

    const限定符

    书上值得注意的点是

    要在const int a=10定义时赋值

    如果是 const int a;a=10//error

    浮点数

    这个与C语言一样

    一般float 为6~7个有效数字

    double为15~16个

    大家想要深入了解的话可以看看,我之前写过的整型与浮点型在内存的存储方式-CSDN博客

    当然,我们还要补充内容

    一个浮点数常量默认为double类型

    如果想要避免类型转换带来的负面影响

    可以提前加入后缀

    一般就是使用后缀f

    比如 float a=1.0f//这样就不会类型转换了

    运算符

    运算符在之前,我也写过详细讲解其实与c语言一样,大家可以看看C语言操作符详细讲解-CSDN博客

    异类类型转换

    这个总结一句话

    如果是一个同类long long转化为int可能会丢失数据

    因为会截断

    如果是

    int转化为long long那么值不影响但是空间占用更多

    如果是浮点型转化为整型

    这会把浮点型的小数部分丢弃

    如果是整型转化为浮点型

    那么在浮点型可表述的数大的时候,数据不会丢失,否则数据丢失

    强制类型转换()

    多用于指针

    接下来就是题目了

    编程练习

    OK都是简单基础入门题

    挑几个来写

    1 使用一个整数指出身高(单位为英寸),分别转化为英寸,英尺

    使用const来表示转换因子,

    1 英寸=0.0833333333333 英尺

    1. #include <iostream>
    2. #include <limits>
    3. using namespace std;
    4. const float infer = 0.083;
    5. int main()
    6. {
    7. int a;
    8. cout << "请输入一个以英寸为单位的身高";
    9. cin>>a;
    10. cout << "您的身高为" << a << "英寸" << a * infer << "英尺";
    11. return 0;
    12. }

    当然,相信cout会自动识别浮点型以及整型

    再来一题把

    其实,好多题目都是一样的

    2编写一个程序,要求按欧洲的汽车耗油量(每100公里消耗的汽油量(升))然后转化为

    美国风格每加仑多少英里

    100公里等于64.14英里

    1加仑仑为3.785升

    OK,直接double就行

    1. #include <iostream>
    2. #include <limits>
    3. using namespace std;
    4. int main()
    5. {
    6. double out;
    7. cin >> out;
    8. cout << (out/3.785)/62.14;
    9. return 0;
    10. }

    ​​​​​​​​​​​​​​

  • 相关阅读:
    vue3 父组件使用ref获取获取子组件的属性方法
    DDS数据分发服务——提升汽车领域数据传输效率
    美容院微信小程序怎么添加会员管理功能
    基于cobra的go语言命令行解析器
    解决 Element-ui中 表格(Table)使用 v-if 条件控制列显隐时数据展示错乱的问题
    为什么推荐软件比自己动手更好?使用推荐软件的好处
    vue3 ts vite elementplus更改主题颜色
    模型部署 利用Tensorflow Serving部署模型
    Docker学习-Docker部署Golang项目和Mysql镜像
    万字手撕七大排序(代码+动图演示)
  • 原文地址:https://blog.csdn.net/comeonworld/article/details/138140344