目录
3.1.3 整型short、int、long和long long
前言
面向对象编程的本质是设计并扩展自己的数据类型。设计自己的数据类型就是让类型和数据匹配。
内置的C++类型分为两组:基本类型和复合类型。基本类型为整数和浮点数,复合类型为数组、字符串、指针和结构体。本讲将学习基本类型
3.1 简单变量
程序通常需要存储信息,到目前为止本书是通过声明一个变量进行的。声明中使用的类型描述了信息的类型和通过符号来表示其变量名。可以通过&获取当前信息存储的内存地址。
3.3.1变量名
变量名其实只要符合规定即可,但最好用有一定的含义:

3.1.2 整型
不同C++整形使用不同的内存量来存储整数,内存量越大整数的范围越大,术语宽度用于描述内存量。
C++的基本类型分别是char, short ,int ,long 和 long long 每种又都分为有符号类型和无符号类型,所以共有10种
3.1.3 整型short、int、long和long long
计算机内存的基本单位是bit(位)。byte(字节)通常指的是8位的内存单元。
在不同的系统中每种类型的长度不同,但对最小长度有所限制:

当前很多系统都使用最小长度,即short16位,long32位。在老式IBM PC中int为16位,在Windows XP 、Windows 7、Macintosh OS X、VAX和很多其他微型计算机的实现中int为32位。
int long shrot 和long long都是符号类型,即:包括正负值两部分。如16位的shrot为-32768 (2^16/2)到 +32767(2^16/2-1)。
- 运算符sizeof与头文件limits
头文件climits定义了符号常量来表示类型的限制:

- 初始化
初始化是将赋值和声明合并在一起:
int a; //声明
a = 5; //赋值
int a = 5; //初始化
C++独有的初始化方法为不适用赋值运算符=使用括号():
int num = 5; //c和c++通用的初始化方法
等价于
int num(5); //c++独有的初始化方法
在C++11中还可以将大括号{}用于初始化:
int num{5};//使用大括号初始化
int num = {5};//使用大括号的同时也可以使用=
int num = {};//大括号内容为空,代表初始化为0
3.1.4 无符号类型
前面说的4种整型都有对应的无符号类型,无符号类型即没有了负数值,扩大了正数的范围,比如16位的short就是0-65535.
创建无符号类型需要使用unsigned来声明:
unsigned nun = 1;//初始化变量num为无符号整型,值为1
预处理语句#define用来定义全局变量,也叫做宏。该值在程序中可直接作为常数使用
#include<iostream>
using namespace std;
#define num 1;//预定义num为1
int main()
{
int a = num;
cout << "a: " <<endl;
}
/*
输出结果:
a: 1
*/
3.1.5 选择整型类型
当没有确定的理由选择整型类型时,使用int整型。
当确定变量没有负值的情况下,使用无符号类型。
当确定变量表示的值大于16位整数的最大值,使用long。
当确定存储的值大于20亿,使用long long。
当有大型整型数组时,可使用short。
当只有一个字节时,使用char。
3.1.6 整型字面值
如果第一位为1~9,则为10进制
如果第一位为0,第二位为1~7,则为8进制
如果前两位为0x,则为16进制
在默认情况下cout以十进制格式显示整数:
#include<iostream>
int main()
{
using namespace std;
int a = 42;//十进制
int b = 0x42;//十六进制
int c = 042;//八进制
cout << "a: " << a << endl;
cout << "b: " << b << endl;
cout << "c: " << c << endl;
}
/*
输出结果:
a: 42
b: 66
c: 34
*/
当然也可以使用十六进制或者八进制输出,在头文件iostream中定义了控制符用于指示cout输出不同类型的值
十进制:dec(默认输出十进制,所以不需要特意进行使用)
八进制:oct
十六进制:hex
#include<iostream>
using namespace std;
int main()
{
int a = 42;
cout << dec_a = " << a << endl;
cout << oct;//使用八进制输出
cout << oct_a = " << a << endl;
cout <<hex;//使用十六进制数出
cout << hex_a = " << a << endl;
return 0;
}
/*
输出结果:
dec_a = 42
oct_a = 52
hex_a = 2a
*/
3.1.7 如何确定常量类型
如果没有特别说明或者有后缀则使用int
后缀u或U - 无符号类型
后缀L - long
后缀ll或LL - long long
后缀可以组合使用,如:22022uL 表示使用无符号long类型
对于不带后缀的十进制则,使用int , long, long long 中可以存储的最小整型
对于不带后缀的八进制或十六进制则,使用int , unsigned int long, unsigned long, long long ,unsigned long long 中可以存储的最小整型
3.1.8 char类型 字符和小整数
char类型是专门为存储字符而设计的,但是也可以用来存储比short小的整数
- 字符的输出函数
cout.put()可以用来替代<<输出字符。其中的句点叫做成员运算符,cout是类ostream的对象,put()是类ostream的成员函数。要通过成员对象使用成员函数必须使用句点连接。读作:通过类对象cout使用函数put()
char a = 'M';
cout.put(a);
//输出结果为:M
- 字符的书写方式
书写字符的方式有多种,最简单的就是使用单引号将字符扩起。这种方法表示的是字符的数值编码,例如:

有的字符无法使用这种方式,C++定义了转义编码:

转义字符作为常量时,应该使用单引号扩起。在字符串中则不需要。
cout << '\n' //字符换行
cout << "hello! \n" //字符串换行
- 通用字符名
C++元须事先提供扩展源字符集和扩展执行字符集。C++中有一种表示 这种特殊字符的机制,他独立于任何特定的键盘,使用通用字符名。
通用字符名的用法类似于转义序列。通用字符名以\u或\U开头,其中\u后是八个十六进制位,\U后是十六个十六进制位。这些位表示的是字符的ISO 10646 码点

- char16_t和char32_t
进行字符编码时,如果有特定的长度和符号特征的类型,将会有帮助。为此,C++11新增了数据类型char16_t和char32_t。二者均是无符号类型,但前者长16位,后者长32位。C++11使用前缀u表示char16_t类型的字符常量或字符串,使用前缀U表示char32_t类型的字符常量。
char16_t ch1 = u'q'; //16位基础字符q
char32_t ch2 = U'U0000222B'; //32位通用字符名
- bool类型
C++新增了bool类型,在计算中bool值可以表示为true或false。任意非零值均为true,false则为0。任何数字或指针都可以被隐式转换为bool值。
3.2 const限定符
C++有一个关键字const叫做限定符,可以使用该关键字来定义常量,例如一个表示月份的常量,则为:
const int Months = 12;
在这之后months就是一个代表12的常量了。
3.3 浮点型
3.3.1 书写浮点数
浮点数可以表示带小数的数字
C++有两种书写浮点型的方法:小数点表示法和E表示法
E表示法由指数和尾数组成,指数为正向右移动小数点,指数为负,向左移动小数点
0.000833 //小数点表示法
8.33E-4 //E表示法,尾数8.33 指数-4 表示8.33的小数点左移4位 0.000833
8.33E4 //E表示法,尾数8.33 指数4 表示8.33的小数点右移4位 83300
3.3.2 浮点类型
c++有三种浮点类型float、double、long double
float至少32位有效位
double至少48位有效位,且不少于float
long double至少和double一样多
可以从头文件cfloat和float.h找到限制范围
3.3.3 浮点常量
浮点常量默认为double类型,如果想要更改可以使用后缀指定
float可以使用后缀f或F
long double可以使用后缀l或L
1.234F//float类型常量
1.234L//long double类型常量
3.4 C+共有五种运算符:加法 减法 乘法 除法 求模
加法 +
减法 -
乘法 *
除法 / 结果是商的整数部分。当除数和被除数都是整数时,结果为商的整数部分。当二者至少有一个是浮点型时,结果为浮点型
int a = 42;
int b = 8;
float c = 8.0
cout << "a/b=" << a/b << endl;
cout <<"a/c=" << a/c << endl;
/*
输出结果:
a/b=5
a/c=5.25
*/
求模 % 结果是商的余数部分(操作数只能为整数)
算术运算符遵循先乘除后加减的基本规律,运算符优先级获取链接:运算符优先级_百度百科 (baidu.com)
- 类型转换
C++会自动进行很多类型转换

但有些转换是安全的有些转换可能会有一定的风险

将0赋给bool变量是会转换为false,非零值将会转换为true。
1 自动类型转换
C++将使用大括号{}初始化的方式称为列表初始化。这种情况下的类型转换不允许缩窄
当同一个表达式中包含两种不同的算数类型时,C++将bool、char、unsigned char、signed char和short转换为int。这些转换被叫做整型提升。具体遵循以下守则

2 强制类型转换
强制类型转换的格式为
(typename) value 或者 typename (value)
C++中的强制类型转换可以使用static_cast<>,格式为
atatic_cast<typename>(value)
int a = 10;
float b = (float)a;//将int转换为float
也可写作
float b = a(float);
也可写作
float b = static_cast<float>(a);
类型也可使用auto自动推导,主要用于复杂结构中,暂不过多学习
282

被折叠的 条评论
为什么被折叠?



