概述
- C++变量命名规则
- C++内置的整型
- C++11新增的整型
- climits文件
- 整型的数字字面值
- const限定符
- C++内置的浮点型
- cfloat文件
- 浮点类型的数字字面值
- C++的算术运算符
- 类型转换
内置的C++类型分两组:基本类型和复合类型。本篇介绍基本类型——整数和浮点数。
简单变量
为了把信息存储在计算机中,程序必须记录3个基本属性:
- 信息将存储在哪里
- 要存储什么值
- 存储什么类型的信息
变量名
C++命名规则:
- 名称中只能使用字母字符、数字和下划线
_
- 名称的第一个字符不能是数字
- 区分大小写字符
- 不能采用关键字
- 以两个下划线
__
、下划线和大写字母_X
大头的名称被保留给实现(编译器及其使用资源)使用。以一个下划线_
开头的名称被保留给实现,用作全局标识符。 - 长度没有限制
整型
没有小数部分的数字。语言只能表示所有整数的一个子集。
不同的C++整型使用不同的内存量存储整数。宽度(width)描述存储整数时使用的内存量。
C++基本类型(宽度递增排列)分别是char
, short
, int
, long
和C++11新增的long long
。每种类型都有符号版本和无符号版本。
整型short, int, long 和long long
short
至少16位int
至少与short
一样长long
至少32位,且至少与int
一样长。long long
至少64位,且至少与long
一样长
字节(byte)通常是指8位的内存单元。C++字节由至少能够容纳实现的基本字符集的相邻位组成。
sizeof
运算符返回类型或变量的长度,单位为字节。
头文件climits
包含了关于整型限制的信息,定义了表示各种限制的符号名称,如INT_MAX
, CHAR_BIT
。
// some integer limits
#include <iostream>
#include <climits>
int main()
{
using namespace std;
int n_int = INT_MAX;
short n_short = SHRT_MAX;
long n_long = LONG_MAX;
long long n_llong = LLONG_MAX;
// sizeof operator
cout << "int is" << sizeof(int) << " bytes." << endl;
cout << "short is" << sizeof n_short << " bytes." << endl;
}
如果不对函数内部定义的变量进行初始化,该变量的值将是不确定的。
初始化方式:
- 将赋值与声明合并在一起
- 大括号初始化器
int emus{7}; // set emus to 5
int rheas = {12}; // set rheas to 12
int rocs = {}; // set rocs to 0
无符号类型
优点是可以增大变量能够存储的最大值。要创建无符号版本的基本整型,只需要使用关键字unsigned
来修改声明。
// excedding some integer limits
#include <iostream>
#define ZERO 0 // make ZERO symbol for 0 value
#include <climits>
int main(){
using namespace std;
short sam = SHRT_MAX;
unsigned short sue = sam;
cout << "Sam has " << sam << " dollars and Sue has " << sue;
cout << " dollars deposited. " << endl
<< "Add $1 to each accout." << endl << "Now ";
sam = sam + 1;
sue = sue + 1;
cout << "Sam has " << sam << " dollars and Sue has " << sue;
cout << " dollars deposited.nPoor Sam!" << endl;
sam = ZERO;
sue = ZERO;
cout << "Sam has " << sam << " dollars and Sue has " << sue;
cout << " dollars deposited." << endl;
cout << "Take $1 from each account." << endl << "Now ";
sam = sam - 1;
sue = sue - 1;
cout << "Sam has " << sam << " dollars and Sue has " << sue;
cout << " dollars deposited." << endl << "Lucky Sue!" << endl;
return 0;
}
该程序的输出:
Sam has 32767 dollars and Sue has 32767 dollars deposited.
Add $1 to each account.
Now Sam has -32768 dollars and Sue has 32768 dollars deposited.
Poor Sam!
Sam has 0 dollars and Sue has 0 dollars deposited.
Take $1 from each account.
Now Sam has -1 dollars and Sue has 65335 dollars deposited.
Lucky Sue!
整型变量如果超越了限制,其值将为范围另一端的取值。
整型类型的选择
通常,int
被设置为对目标计算机而言最为“自然”的长度。自然长度(natural size)指的是计算机处理起来效率最高的长度。
整型字面值
即常量,是显式地书写的常量。C++能够以3中不同的计数方式书写整数:十进制、八进制076
和十六进制0xf7
。
默认情况下,cout
以十进制格式显示整数。不管采用哪种计数方式书写常数,它都将以相同的方式存储在计算机中——二进制。
iostream
还提供控制符dec, hex, oct
分别用于指示cout
以十进制、十六进制和八进制格式显示整数。
// display values in hex and octal
#include <iostream>
using namespace std
int main(){
int chest = 42;
int waist = 42;
int inseam = 42;
cout << "Monsieur cuts a striking figure!" << endl;
cout << "chest = " << chest << " (decimal for 42)" << endl;
cout << hex; // manipulator for changing number base
cout << "waist = " << waist << " (hexadecimal for 42)" << endl;
cout << oct;
cout << "inseam = " << inseam << " octal for 42)" << endl;
return 0;
}
除非有理由存储为其它类型,否则C++将整型常量存储为int
类型。
后缀是放在数字常量后面的字母,用于表示类型:2202L. 2202ul, 2202lu 2202ll
对于不带后缀的十进制整数,将使用int, long, long long
中能够存储该数的最小类型来表示。对于不带后缀的十六进制或八进制整数,将使用int, unsigned int, long, unsigned long, long long, unsigned long long
中能够存储该数的最小类型表示。
char
类型:字符和小整数
编程语言通过使用字母的数值编码解决了存储字幕的问题。
最常用的符号集是ASCII字符集。
输入时,cin
将字符转换为数值编码;输出时,cout
将数值编码转换成字符。
cin, cout
的行为都是由变量类型引导的。
C++对字符用单引号'
,对字符串用双引号"
。C++中,书写字符常量的方式有多种:
- 将字符用单引号括起:常规字符
- 转义序列:不能直接输入的字符
- 基于字符的八进制和十六进制的转义序列
- 通用字符名(universal character name):以
u
开头后接8个十六进制位,或U
开头后接16个十六进制位,表示字符的IOS 10646码点。
cout.put()
函数用于显示单个字符。
// the char type
#include <iostream>
int main(){
using namespace std;
char ch = 'M';
int i = ch;
cout << "The ASCII code for " << ch << " is " << i << endl;
cout << "Add one to the character code:" << endl;
ch = ch + 1;
i = ch;
cout << "The ASCII code for " << ch << " is " << i << endl;
// Using the cout.put() member function to display a char
cout << "Displaying char ch using cout.put(ch): ";
cout.put(ch);
cout.put('!'); //a char constant
cout << endl << "Done" << endl;
return 0;
}
字符变量实际上是一个整数变量,因此可以对它使用整数操作。
char
是否有符号由 C++ 实现决定。
wchar_t
宽字符类型表示扩展字符集。cin
和cout
将输入和输出看作char
流,不适合处理wchar_t
类型。iostream
头文件的最新版本提供了wcin
和wcout
用于处理wchar_t
流。
在计算机系统上进行字符和字符串编码时,仅使用Unicode码点并不够。因此,C++11新增了类型char16_t
和char32_t
,采用前缀u
表示char16_t
字符常量和字符串常量,U
表示char32_t
常量。
char16_t ch1 = u'q';
char32_t ch2 = U'U0000222B'
bool
类型
分别用预定义的字面值true
和false
表示真假。字面值true
和false
都可以通过提升转换成int
类型。
任何数字值或指针值都可以被隐式转换为bool
值。
bool is_ready = true;
int ans = true;
int promise = false;
bool start = -100; // start assigned true
bool stop = 0; // stop assigned false
const
限定符
使用const
关键字来修改变量声明和初始化,限定声明的含义。常量被初始化后,其值就被固定了,编译器将不允许再修改该常量的值。
一种常见的做法是将名称的首字母大写,有助于区分常量和变量。
创建常量的通用格式:const type name = value;
相对于#define
而言,const
能够明确指定类型,且可以使用C++的作用于规则将定义限制在特定的函数或文件中,而且可以用于更复杂的类型。
浮点数
计算机将浮点数分为两部分存储:一部分表示值,另一部分用于对值进行放大或缩小。
to be continued…
C++ 算术运算符
+
, -
, *
, /
, %
运算符优先级和结合性
除法分支
除法运算符/
的行为取决于操作数的类型。整数除法丢弃结果的小数部分。
实际上,对不同类型进行运算时,C++将它们全部转换成同一类型。
使用相同的符号进行多种操作叫做运算符重载(operator overloading)。
类型转换
C++自动执行很多类型转换:
- 将一种算数类型的值赋给另一种算数类型的变量
- 表达式中包含不同的类型
- 将参数传递给函数
初始化和赋值进行的转换
将一个值赋给值取值范围更大的类型通常不会导致什么问题。
将较大的浮点类型转换为较小的浮点类型,精度降低,值可能超出目标类型的取值范围(结果不确定)
将浮点类型转换为整型,小数部分丢失,原来的值可能超出目标类型的取值范围(结果不确定)
将较大整型转换为较小整型,原来的值可能超出目标类型的取值范围(通常只复制右边的字节)
以{}
方式初始化进行的转换
C++11将使用大括号的初始化称为列表初始化(list-initialization)。
该类初始化不允许缩窄(narrowing),即变量的类型可能无法表示赋给它的值。
int x = 66;
char c1 {31325}; // narrowing, not allowed
char c2 = {66}; // allowed
char c3 = x; // not allowed, x is not constant
x = 31325;
char c5 = x; // allowed by this form of initialization
表达式中的转换
自动转换:
- 整型提升(integral promotion)
bool, char, unsigned char, signed char, short
→ to →int
- ……
传递参数时的转换
强制类型转换
(long) thorn // returns a type long conversion of thorn
long (thorn) // returns a type long conversion of thorn
强制类型转换不会改变变量本身,而是创建一个新的、指定类型的值。
C++还引入了4个强制类型转换运算符。其中,static_cast<typeName> (value)
可用于将值从一种数值类型转换为另一种数值类型。
C++11中的auto
声明
在初始化声明中,如果使用关键字auto
,而不指定变量的类型,编译器将把变量的类型设置成与初始值相同。
auto n = 100; // n is int
auto x = 1.5; // x is double
auto y = 1.3e12L; // y is long double
最后
以上就是高兴咖啡为你收集整理的C++ Primer Plus学习笔记03-处理数据简单变量const限定符浮点数C++ 算术运算符的全部内容,希望文章能够帮你解决C++ Primer Plus学习笔记03-处理数据简单变量const限定符浮点数C++ 算术运算符所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复