第三章
C++基本整型
有5种:
char
short 至少16位
int 至少与short一样长
long 至少32位且至少与int一样长
long long 至少64位且至少与long一样长
内存基本单元为位(bit)组成,一个字节(byte)为8位。
也就是说:
8位单元能表示256个数
16位单元能表示65536个数
32位单元能表示4294672296个数
64位单元能表示18446744073709551616个数
…
除char外其他四种都是符号类型,也就是正负数能表示各一半。
并且有对应的无符号型变体:
unsigned short
unsigned int
unsigned long
unsigned long long
无符号型变体是为了舍弃表示负数来增大正数的表示值。也就是说能表示的数的量是不变的,只是从0开始了。例如short可以表示-32768到+32768,unsigned short则表示
0到65536。并不是直接将负数砍掉。
这里还有一个整型溢出行为,就是超过能表示的最值之后,会有个循环一样的溢出,也就是+32767再+1的话就会变成-32768。
sizeof()函数
返回类型或变量的长度,单位为字节。
#include <iostream>
using namespace std;
int main()
{
cout << sizeof(char) <<endl
<< sizeof(short) <<endl
<< sizeof(int) <<endl
<<sizeof(long)<<endl
<< sizeof(long long)<<endl;
return 0;
}
输出为:
1
2
4
8
8
可以看出各个类型的长度,char为1、short为2、int为4、long为8、long long为8。
变量的用法一样的,只不过括号可以省略:sizeof(an_int);
或者sizeof an_int;
。
头文件climits中定义了一些常用的符号常量:
不同进制数
第一位为1~9,为10进制数
第一位为0,第二位为0~7,为8进制数
前两位为0x或者0X,为16进制数
int dec_num = 42;
int hex_num = 0x42;
int oct_num = 042;
在输出时,用dec、hex、oct来控制cout以十进制,十六进制,八进制输出数字的格式。默认格式为十进制,在修改格式之前,原来的格式一直持续效果!
cout<<"dec: a= "<<a<<endl;
cout<<"hex: a= "<<hex<<a<<endl;
cout<<"oct: a= "<<oct<<a<<endl;
cout<<dec;//再改回默认的十进制,不然忘了会很蛋疼
输出结果为:
dec: a= 10
hex: a= a
oct: a= 12
代码中,最后别忘了将输出格式再改回十进制。
**
char类型
**
char类型经常被用作字符类型,但在本质上就是比较小的整数。它在输入,输出,赋值上的所有的字符表象的功能,都是赋值等号,cin,cout的翻译功能,内部核心仍然就是整数。翻译规则一般就是ASIC码。
char ch1 = 97;
cout<<ch1<<endl;
cout<<int(ch1)<<endl;
char ch2 = 'b';
cout<<ch2<<endl;
cout<<int(ch2)<<endl;
输出:
a
97
b
98
可以发现,输入的话,用编码或者字符都能接受,输出的话默认形式就是字符,除非强制转换类型,会输出ASIC码。
ASIC码中还有一些常用的转义序列。比如\n \ \? \’ \”等,反正就是一些代表特殊共能的字符。
**
布尔类型
**
bool is_ready true;
bool pass false;
bool start 100;
bool stop 0;
标准的用法是true和false。也接受数值,非0解析为true,0解析为false。
**
浮点数
**
解释下为啥叫浮点数,在计算机内部存储时,浮点数是分两块存储的,一块是字面的值,另一块就是小数点位置。所以叫浮点数。
表示方式有两种:0.34 和3.4e-1 。e表示法大小写都可以。前面为系数,后面为指数,底数为10.
基本浮点类型有三种:
float 32位
double 64位
long double 80,96,128位
三种类型的指数范围至少是-37~37
浮点数cout格式是一大块内容,后续再搞。
浮点常量是在数字后面加f或者L,大小写都可以:
1.345f
2.456L
类型转换
只说一下强制类型转换:
int a = 0;
double(a);
(double)a;
static_cast<double>(a);
这三种都是强制类型转换,一般用第一种;第二种是c时代遗留下来的,一般不用;第三种是后引入的四种强制装换中的一种,规范并严格了类型的转换。后面详说,这里只需要知道它就是强制类型转换。
auto类型就是自动推断变量类型,
auto a = 100,则a被自动推断为int型,一般auto用于复杂类型,比如长长的模板类型,来个auto看起来比较清爽。