我是靠谱客的博主 高兴咖啡,最近开发中收集的这篇文章主要介绍C++ Primer Plus学习笔记03-处理数据简单变量const限定符浮点数C++ 算术运算符,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  • 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码点。
    C++转义序列编码

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宽字符类型表示扩展字符集。cincout将输入和输出看作char流,不适合处理wchar_t类型。iostream头文件的最新版本提供了wcinwcout用于处理wchar_t流。

在计算机系统上进行字符和字符串编码时,仅使用Unicode码点并不够。因此,C++11新增了类型char16_tchar32_t,采用前缀u表示char16_t字符常量和字符串常量,U表示char32_t常量。

char16_t ch1 = u'q';
char32_t ch2 = U'U0000222B'

bool类型

分别用预定义的字面值truefalse表示真假。字面值truefalse都可以通过提升转换成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++ 算术运算符所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(70)

评论列表共有 0 条评论

立即
投稿
返回
顶部