一、基本数据类型
1、C++ 数据类型所占的长度和位数
可寻址的最小内存块成为“字节(byte)”,存储的基本单元称为“字(word)”,大多数机器的字节都是由8个比特(bit)构成,字是由32bit或者64bit构成。
1 word = 4 byte = 32 bit
1 word = 8 byte = 64 bit
**备注:**字符型尽管有三种,但是字符的表现形式却只有两种,有符号和无符号,char
实际表现形式为上述哪一种由编译器决定,所以在定义变量时最好明确指出是有符号还是无符号。
2、如何选择数据类型
- 当明确知晓数值不可能为负数时,选用无符号类型
- 使用int执行整数运算。在实际应用中,short常常显得太小而long一般与int由相同的尺寸。如果你的数值超过了int的表示范围,选用long long。
- 在算数表达式中不要使用char或者bool,只有在存放字符或者布尔值时才使用它们。因为类型char 在一些机器上是有符号的,而在另一些机器上又是无符号的,所以如果使用char 进行运算特别容易出问题。如果需要使用一个不大的整数,那么明确指定类型是signned char或者是unsigned char 。
- 执行浮点数运算选用double,这是因为float 通常精度不够而且双精度浮点数和单精度浮点数的计算代价相差无几。事实上,对于某些机器来说,双精度运算甚至比单精度的运算速度还要快。long double 提供的精度在一般情况下是没有必要的,况且他带来的运算时消耗也是不容忽视的。
**备注:**切勿混用无符号类型和带符号类型。否则由负数值存在的时候会出现问题,这是因为带符号数会自动地转化为无符号数。
例:
int main()
{
unsigned u = 10; //表示unsigned int类型的数据
int i = -42;
cout << typeid(i).name() << endl;
cout << i + i << endl; //输出-84
cout << u + i << endl; //如果int是32位,输出结果为4294967264
system("pause");
return 0;
}
另外,当从无符号数中减去一个值时,不管这个数是不是无符号数,都必须确保结果不能是负数。无符号数是不可能小于0 的,即无符号数u=0之后再自减得到的是一个正数。