美文网首页
c++笔记1

c++笔记1

作者: 天然呆的达斯琪 | 来源:发表于2018-12-30 21:14 被阅读0次

    1.数据类型


    图1-数据类型

    黑色的是c和c++共有的数据类型,
    红色的是c++独有的数据类型。


    2.基本类型数据的内存长度和数值范围


    图2.1

    所以无符号类型用原码表示,
    有符号类型用补码表示。

    图2.2

    具体参见->计算机中数值的表示方式


    其中,C,C++规定,16进制数必须以 0x开头,8进制以0开头,貌似没有规定2进制。
    在数制使用时,常将各种数制用简码来表示:如十进制数用D表示或省略;二进制用B来表示;十六进制数用H来表示。
    如:十制数123表示为:123D或者123;二进制数1011表示为:1011B;十六进制数3A4表示为:3A4H

    #include<iostream>
    using namespace std;
    int main(int argc, char const *argv[])
    {
        int a=0x11,b=0011;
        cout<<a<<endl<<b<<endl;
        return 0;
    }
    

    运行结果:


    图2.3

    3.关于补码
    取四位二进制数,它们的补码如下所示

      1111 = -1         0000 = 0
    
      1110 = -2         0001 = 1
    
      1101 = -3         0010 = 2
    
      1100 = -4         0011 = 3
    
      1011 = -5         0100 = 4
    
      1010 = -6         0101 = 5
    
      1001 = -7         0110 = 6
    
      1000 = -8         0111 = 7
    

    那么如何计算负数的补码?

      1111 = -1         0001  ->  1110  +1  ->  1111
    
      1110 = -2         0010  ->  1101  +1  ->  1110
    
      1101 = -3         0011  ->  1100  +1  ->  1101
    
      1100 = -4         0100  ->  1011  +1  ->  1100
    
      1011 = -5         0101  ->  1010  +1  ->  1011
    
      1010 = -6         0110  ->  1001  +1  ->  1010
    
      1001 = -7         0111  ->  1000  +1  ->  1001
    
      1000 = -8         1000  ->  0111  +1  ->  1000
    

    所以补码的负数就是将正数的二进制表示按位取反再加一。
    值得一提的是-8的补码表示。
    所以,四位二进制补码的表示范围是-8~+7。
    具体参见->补码介绍


    4.整型


    5.浮点型

    C++语言浮点型又称实型,分为单精度(float)、双精度(double)和长双精度(long double) 3种。
    在C++中规定float型在内存中占用 4个字节,提供7位有效数字;
    double型和long double型在内存中占用 8个字节,提供16位有效数字。

    单精度变量赋值后面加f是表明该数字为单精度浮点型数字(float);类似地,后面如果加d则是表明该数字为双精度浮点型数字(double)。如果在代码中使用一个小数而没有加任何后缀,则此数字自动视为double类型。


      float a=0.00000678f;
      float b=0.00000678;
      double c=0.00000678;
    

    a为float类型,b为double类型,c为double类型。


    参考以下代码

    #include<iostream>
    using namespace std;
    int test(int a,int b){
        return a+b;
    }
    float test(float a,float b){
        return a+b;
    }
    int main(int argc, char const *argv[])
    {
        cout<<test(1,2)<<endl<<test(1.1f,1.2f)<<endl;
        return 0;
    }
    
    5.1.png

    若将

    cout<<test(1,2)<<endl<<test(1.1f,1.2f)<<endl;
    

    改为

    cout<<test(1,2)<<endl<<test(1.1,1.2)<<endl;
    

    则编译出错,这个主要是函数重载解析的问题
    1.选择候选函数
    2.选择可行函数
    3.选择最佳可行函数
    test(1.1f, 1.2f),对于两个test都是候选的,也都是可行的,但是1.1f,1.2f严格匹配float参数,因为他俩就是float,所以不会有二义性
    如果改成test(1.1,1.2),他俩就是double的在选择第三步时,由于double可以向int转换,也可以向float转换,而且转换具有同等地位,所以就会产生二义性


    6.字符型

    相关文章

      网友评论

          本文标题:c++笔记1

          本文链接:https://www.haomeiwen.com/subject/sfqblqtx.html