C++ 学习笔记 第三章

3 处理数据

3.1简单变量

3.1.1 变量名

C++变量名的命名规则。

  1. 在名称中只能使用字母字符、数字和下划线(_)。
  2. 名称的第一个字符不能是数字。
  3. 区分大写字符和小写字符。
  4. 不能将C++关键字用作名称。
  5. 以两个下划线或下划线和大写字母打头的名称被保留给实现(编译器及其使用的资源)使用。以一个下划线开头的名称被保留给实现,用作全局标识符。
  6. C++对于名称的长度没有限制,名称中所有的字符都有意义,但有些平台有长度的限制。

3.1.2 整型

C++中基本整型(按宽度递增的顺序排序)分别是char、short、int、long和C++11新增的long long。其中每种类型都有符号版本和无符号版本,因此共有中类型可供选择。
这里涉及到《计算机系统基础》中的数据的长度和宽度。
首先我们要知道计算机内部的任何信息都可以用二进制码(0和1)来表示,而一个二进制表示一个bit(比特)。在二进制信息的计量单位是 ”字节“(Byte)

1 Byte = 8 bit

3.1.3 整型short、int、longlong long

在C++的标准中,C++提供了一种比较灵活的标准,它确保了最小长度(从C语言借鉴而来)

  1. short至少16位;
  2. int至少与short一样长
  3. long至少32位,且至少与int一样长;
  4. long long至少为64位,且至少与long一样长。
#include<iostream>
#include<climits>
using namespace std;
int main(){
    int n_int = INT_MAX; //initialize n_int to max int value
    short n_short = SHRT_MAX; //symbols defined in climits file
    long n_long = LONG_MAX;
    long long n_llong = LLONG_MAX;
    //sizeof operator yields size of type or of variable
    cout << "int is " << sizeof n_int << " bytes." << endl;
    cout << "short is " << sizeof n_short << " bytes." << endl;
    cout << "long is " << sizeof n_long << " bytes." << endl;
    cout << "long long is " << sizeof n_llong << " bytes." << endl;
    cout << endl;
    cout << "Maximum Values: " << endl;
    cout << "int: " << n_int << endl;
    cout << "short: " << n_short << endl;
    cout << "long: " << n_long << endl;
    cout << "long long: " << n_llong << endl << endl;
    cout << "Minimum int value = " << INT_MIN << endl;
    cout << "Bits per byte = " << CHAR_BIT << endl;
    system("pause");
}
// Author: 崔小葵
// Date: 2020-10-13

在这里插入图片描述
注意:unsigned本身是unsigned int的缩写。
这里面的运算规则如下:

1 Byte = 8 bit;

由于上面的代码片段中没有unsigned,说明上述数字都是有符号数,《计算机系统基础》中说明了,有符号数的二进制表示中首位为符号位(0为正数,1代表负数)。
以上面的1 Byte为例,有符号数的二进制表示中,共有8位,每一位由0和1组成。
无符号数能表示的范围是【0 ~ 28】=【0 ~ 256】;
有符号数能表示的范围是【-27 ~ 27-1】=【-128 ~127】这里有个0也要加进去。
注意:如果你的系统不支持类型long long,应删除该类型的代码行。

1. 运算符sizeof和头文件limits

对类型名或变量名使用sizeof运算符,**对类型名(如int)使用sizeof运算符时,应将名称放在括号中;但对变量名(如n_short)使用该运算符,括号是可选的;

#include<iostream>
#include<climits>
using namespace std;
int main(){
    int n_int = INT_MAX;
    cout << "int is " << sizeof (int) << " bytes." << endl;
    cout << "int is " << sizeof n_int << " bytes." << endl;
    system("pause");
}
//Author: 崔小葵
//Date: 2020-10-14

在这里插入图片描述
从上述程序中我们看到两者输出的结果都是一样的。

climits 中的符号常量
符号常量表示
CHAR_BITchar的位数
CHAR_MAXchar的最大值
CHAR_MINchar的最小值
SCHAR_MAXsigned char的最大值
SCHAR_MINsigned char的最小值
UCHAR_MAXunsigned char的最大值
SHRT_MAXshort的最大值
SHRT_MINshort的最小值
USHRT_MAXunsigned short的最大值
INT_MAXint的最大值
INT_MINint的最小值
UNIT_MAXunsigned int的最大值
LONG_MAXlong的最大值
LONG_MINlong的最小值
ULONG_MAXunsigned long的最大值
LLONG_MAXlong long的最大值
LLONG_MINlong long的最小值
ULLONG_MAXunsigned long long的最大值
2.初始化

初始化将赋值与声明合并在一起。

int n_int = INT_MAX;

上述语句声明了变量n_int,并将int的最大取值赋给它;
同时也可以这样赋值

int a = b = 5;

上述语句中是将5赋值给b,再将b(b的值为5)赋值给a;

3.C++11初始化方法

还有另一种初始化方法,这种方式用于数组和结构,但在C++98中,也可用与单值变量。

#include<iostream>
using namespace std;
int main(){
    int num1 = {24};
    int num2 {32};
    int num3 {};
    int num4 = {};
    cout << "num1 = " << num1 << endl ;
    cout << "num2 = " << num2 << endl ;
    cout << "num3 = " << num3 << endl ;
    cout << "num4 = " << num4 << endl ;
    system("pause");
}
//Author: 崔小葵
//Date:2020-10-14

在这里插入图片描述
通过上述代码的运行示意图,我们可以知道大括号内可以不包含任何东西。在这种情况下,变量将被初始化为零。

3.1.4 无符号类型

#include<iostream>
#include<climits>

#define ZERO 0

using namespace std;

int main(){
    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 account." << 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;
    system("pause");
}
// Author: 崔小葵
// Date: 2020-10-14

在这里插入图片描述
从上述代码运行结果中,我们可以看到:

  1. 我同时定义了一个短整型和一个无符号数的短整型,同时将短整型设置为最大值。再将短整型赋值给无符号的短整型。
    (最大值的求法是:在我的电脑上,短整型为2byte,即16bit。
    则无符号数的短整型的取值范围为【0 ~ 216】 = 【0 ~ 65536】。
    短整型的取值范围为 【215 ~ 215- 1】= 【32768 ~ 32767】。
  2. 所以同时加一后,有符号数会从重置点回到-32768。而无符号数则是直接加1。

在这里插入图片描述

3.1.5 整形字面值

#include<iostream>
using namespace std;
int main(){
    int chest = 42; //十进制
    int waist = 0x42; //十六进制
    int inseam = 042; //八进制

    cout << "Monsieur cuts a striking figure!\n";
    cout << "chest = " << chest << " (42 in decimal)\n";
    cout << "waist = " << waist << " (0x42 in hex)\n";
    cout << "inseam = " << inseam << " (042 in octal)\n";
    system("pause");
}
// Author: 崔小葵
// Date: 2020-10-15

在这里插入图片描述

#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 << "wasit = " << waist << " (hexadecima for 42)" << endl;
    cout << oct;
    cout << "inseam = " << inseam <<" (octal for 42)" << endl;
    system("pause");
    return 0;
}
// Author: 崔小葵
// Date: 2020-10-17

在这里插入图片描述

从上述代码运行结果我们可以看出,在莫仍情况下,cout是以十进制显示整数,如果要以十六进制或八进制,则可以使用诸如cout << hex;等代码,这些代码是不会再屏幕上显示任何内容,而只是修改cout显示整数的方式。因此,控制符hex实际上是一条消息,告诉cout采取何种行动。

3.1.6 char类型:字符和小整数

char类型是专门存储字符(如字母和数字)而设计的。
char类型是另一种整型。他足够长。能够表示目标计算机系统中所有基本符号——所有的字母、数字、标点符号等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值