zoukankan      html  css  js  c++  java
  • CPL学习笔记(一)

    整型

    计算机的内存的基本单位是位(bit),可以将其看作电子开关,可以开,表示1;也可以关表示0。

    字节(byte)通常指八位的内存单元。

    8bit=1byte=1B;
    1KB=1024B;
    1M=1024KB;
    1G=1024M;
    1T=1024G;

    如果在考场上忘记了数据类型的范围或字节数,莫着急,C++的特技<climits>就是为了解决此问题的。

    常用函数:N_MAX,N_MIN.(N代表数据类型)
    秒懂代码:
    #include<iostream>
    #include<cstdio>
    #include<climits>
    using namespace std;
    int main()
    {
        int intmax=INT_MAX;
        int intmin=INT_MIN;
        long longmax=LONG_MAX;
        long longmin=LONG_MIN;
        short shortmax=SHRT_MAX;
        short shortmin=SHRT_MIN;
        long long llongmax=LLONG_MAX;
        long long llongmin=LLONG_MIN;
        printf("short is %d byte
    ",sizeof(short));
        printf("int is %d byte
    ",sizeof(int));
        printf("long is %d byte
    ",sizeof(long));
        printf("long long is %d byte
    ",sizeof(long long));
        printf("maximum:
    ");
        printf("short: %hd
    ",shortmax);
        printf("int: %d
    ",intmax);
        printf("long: %ld
    ",longmax);
        printf("long long: %lld
    ",llongmax);
        printf("minimum: 
    ");
        printf("short: %hd
    ",shortmin);
        printf("int: %d
    ",intmin);
        printf("long: %ld
    ",longmin);
        printf("long long: %lld
    ",llongmin);
        return 0;
    } 

    输出结果也是一目了然:

    short is 2 byte
    int is 4 byte
    long is 4 byte
    long long is 8 byte
    maximum:
    short: 32767
    int: 2147483647
    long: 2147483647
    long long: 9223372036854775807
    minimum:
    short: -32768
    int: -2147483648
    long: -2147483648
    long long: -9223372036854775808
    
    --------------------------------
    Process exited after 0.1151 seconds with return value 0
    请按任意键继续. . .
    该方法适用于所有整型。
    值得一提的是,char也是整型的一种,CHAR_MAX=127;
    这就提醒我们:char类型的加减法一定要小心,a的ASCLL码为97,也就是说两个值为‘a’的char类型相加就会出错。。。
    FOR_EXAMPLE:
    cout<<(char)('a'+'a');
    我们也许会认为这行代码会输出ASCLL码为194的字符,其实不然,这句代码是错误的,它什么也不会输出。
    有一种方法可以不完全的解决这个问题:unsigned char(范围0~255)
    数据类型的溢出
    int intmax=INT_MAX;
    int intmin=INT_MAX;
    cout<<intmax<<" "<<intmax+1;
    cout<<intmin<<" "<<intmin-1;
    return 0;

    既然是数据类型的最大值,intmax+1应该不会大于2147483647,同理,intmin-1也应该不会小于-2147483648,不错,就是这样。

    2147483647 -2147483648
    -2147483648 2147483647

    意想不到的是,intmax+1竟然=INT_MIN,这就是上溢现象。这种现象不好解释,但是一张图片就能将其描述清楚。

    图片位置:C++ XXXX page 44.[手动滑稽]

    整型字面值

    C++能用三种不同的计数方式来书写整数,基数为10、基数为8、基数为16.

    C++使用前一位或二位来标识数字常量的基数。
    case 1:第一位为1~9,基数为10(十进制)。
    case 2:第一位为0,第二位为1~7,基数为8(八进制)。
    case 3: 前二位为0x或0X,则基数为16(十六进制)。

    秒懂代码:

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        int decn=42;
        int octn=042;
        int hexn=0x42;
        printf("042 八进制转十进制:%d
    ",octn); 
        printf("42  十进制:%d
    ",decn); 
        printf("0x42十六进制转十进制:%d
    ",hexn);
        return 0; 
    } 

    下附输出:

    042 八进制转十进制:34
    42  十进制:42
    0x42十六进制转十进制:66
    
    --------------------------------
    Process exited after 0.0688 seconds with return value 0
    请按任意键继续. . .
    也就是说加上特殊标记后,我们可以直接存储十六/八进制数,但输出时默认转为十进制。如果我们希望直接输出十六/八进制数,该怎么办呢?
    方法是有的,十六/八进制可是属于C++的计数方式,after all.于是乎,cout装备了一些C++的特技:
    直接贴代码:
    int n=15;
    cout<<n<<endl;
    cout<<oct;
    cout<<n<<endl;
    cout<<hex;
    cout<<n<<endl;
    cout<<dec;
    cout<<n<<endl;
    初学者也许会把oct、dec等当成忘记声明的变量(开始我就是这么认为),其实不然,它们分别代表十进制(dec)、八进制(oct)、十六进制(hex)。cout的默认输出格式为十进制,不难猜测,cout<<oct;就是将其输出格式改为八进制,hex也是同理。
    输出:
    15
    17
    f
    15
    
    --------------------------------
    Process exited after 0.07195 seconds with return value 0
    请按任意键继续. . .
    n的数值自始至终并未发生改变,只是进制改变了。
    C++如何确定常量的类型

    举个栗子:

    cout<<"Year = "<<1492<<endl;
    这里的1492的类型将被存为什么呢?答案是:除非int类型不够大或者常量带有后缀,则存为int类型。
    那么这里再介绍一下后缀:
    u,表示此常量为unsigned int类型,如:1492u;
    ul,表示此常量为unsigned long类型.等同于lu.
    ull,表示此常量为unsigned long long类型.
    ll,表示此常量为long long int类型.
    对于不带后缀的十进制数,采用int,l,ll(按优先级顺序)
    而对于不带后缀的十六/八进制数,采用int,u,l,ul,ll,ull.
    转义序列

    根据个人初步理解,转义序列的意义就是用‘’加字符或数字表示一些特殊意义。

    名称C++代码ASCII(dec)
    换行符 10
    水平制表符 9
    垂直制表符 v 11
    退格  8
    回车 13
    振铃 a 7

    提示:cout<<' '; 与 cout<<'10'; 是等价的。即ASCII码可用于转义序列的表示。

    通用字符名

    格式为u或U开头,后加4(u)或8(U)位十六进制数。 这与一种叫Unicode的编码有关: https://baike.baidu.com/item/Unicode/750500?fr=aladdin <--------度娘在这里

    如:

        cout<<"u4734"<<endl;
        cout<<"U000E34E4";

    输出在这里:

    錅
    螅摛
    --------------------------------
    Process exited after 0.06648 seconds with return value 0
    请按任意键继续. . .

    这东西。。。高深!

    符号常量——预处理器方式
    #define INT_MAX 32777

    这行代码我们并不陌生,学名:定义符号常量,#define & #include一样,也是预处理器编译指令。这是C语言遗留下来的定义方法,C++中的const其实已经在很多方面上代替了它。

    int a=1;  C语言的初始化方式
    int a(1); C++的初始化方式
    const 限定符
    const int n=221024;

    然后,n的值就无法进行修改了。

    const int n;
    n=10;

    这是一种经典的错误,n开始被初始化成了一个不确定的值,而后面的n=10,也就无效了。

  • 相关阅读:
    arcgis10.2转shp文件中文乱码问题解决方案
    Android Context作为参数传递this
    andriod inputbox
    andriod inputType
    《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)
    终于理解了什么是LGPL
    产品经理如何与强势的技术沟通? 技术比较有资历,会以技术无法实现等方面的原因拒绝处理产品提出的需求。 你们是否遇到这样的技术? 产品懂技术的话,是不是会好一些,因为可以和技术说“行话”了,并且产品懂技术就不会被忽悠了。
    Core Dump总结
    LIBRARY_PATH是编译时候用的,LD_LIBRARY_PATH是程序运行是使用的
    如何禁止C++默认成员函数
  • 原文地址:https://www.cnblogs.com/yanyiming10243247/p/9238502.html
Copyright © 2011-2022 走看看