c++笔记1
1.数据类型
图1-数据类型
黑色的是c和c++共有的数据类型,
红色的是c++独有的数据类型。
2.基本类型数据的内存长度和数值范围
图2.1
所以无符号类型用原码表示,
有符号类型用补码表示。
具体参见->计算机中数值的表示方式
其中,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.字符型