c++笔记1

2018-12-30  本文已影响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.字符型

上一篇下一篇

猜你喜欢

热点阅读