匈牙利命名法
命名一个标识符时,若需要用到多个单词,则需要把每个单词的第一个字母大写,如 StudentName;
如今也有一个新习惯,第一个单词的第一个字母小写,其后的每个单词的第一个字母都大写,如 studentName 。
数据类型的注意点
C++中的基本数据类型可以分为两类,整型和浮点型。
整型:
包括: char、int、bool 和 enum。
计算机内部采用原码或补码的形式来表示这类数据。
整型不单指 int 型。
char型数据虽然是整型,但整型指的是ASCII表上的数字,输出char型数据时,会显示这些数 对应的字符,若要输出数字,则需用 int() 来强制转换后再输出。
对整型标志符 char 和 int 加上前后缀,可得到其他类型的整型量,具体如下表:
类型标识符 | 意义 | 占用字节 | 取值范围 |
signed char | 有符号字符 | 1 | -2^7 ~ 2^7-1 |
unsigned char | 无符号字符 | 1 | 0 ~ 2^8-1 |
signed short int | 有符号短整型 | 2 | -2^15 ~ 2^15-1 |
unsigned short int | 无符号短整型 | 2 | 0 ~ 2^16-1 |
signed int | 有符号整型 | 4 | -2^31 ~2^31-1 |
unsigned int | 无符号整型 | 4 | 0 ~ 2^32-1 |
signed long int | 有符号长整型 | 4 | -2^63 ~ 2^63-1 |
unsigned long int | 无符号长整型 | 4 | 0 ~ 2^64-1 |
signed long long int | 有符号超级长整型 | 8 | -2^64 ~ 2^64-1 |
注:表中的占用字节就是该型数据所占用的存储空间,字节是一种内存单位,内存单位的转化如下:
1 Byte (字节) = 8 Bit (位)
1 KB = 1024 Byte
1 MB = 1024 KB
1 GB = 1024 MB
1 TB = 1024 GB
典例:
答案:B C
分析:数字32768就是2^15,结合提示可知,这个数字超过了b的数据类型可表示的最大的数,所以输出了负号,因此可推知,a的数据类型所能表示的最大数比32468大,b的数据类型所能表示的最大的数比32468小,故只有当b为short型时符合题意,因此选BC。
浮点型:
包括 float 和 double 。
在计算机内部采用浮点形式表示。
实型就是浮点型。
double 型能保留16位有效数字,float 型只能保留7位有效数字。
int型数据的存储方式
int 型占四字节,就是占用32个二进制位,因为int是有符号整型,所以他的最左边的那位作为符号位,若是 unsigned 型,则没有符号位,所以其取值范围更大;
int型在内存中以补码的形式存储,正整数的补码和原码相同,负整数的补码是除符号位以外的原码取反加一;
浮点数的表示方法
在CS里,称小数为浮点数,就是把传统的小数写法记成科学计数法的形式,举个例子,1.23456,这是传统意义上的小数,对于CS定义的浮点数来说,这是用定点数的形式表示的,小数点永远在那里,不能用定点形式写出第二个和它意义相同而外表不同的数;
如果用浮点数形式来写1.23456,就可以写成12.3456*10^-1,123.456*10^-2等等,这样小数点就可以自由浮动,精度也可以随之改变了;
浮点数用二进制来表示,其格式就是:符号位 指数位 小数位
符号位和负整数是同一类,指数位和小数位就用二进制原码表示;
其中需要注意的是,指数位写完后是向右补齐,而非常见的向左补齐;
进制转换计算方法
二进制 binary
八进制 octonary
十进制 decimal
十六进制 hex
小数部分的十进制转二进制:取出小数的小数部分,每次乘2,取出结果的整数部分作为这一位的二进制数,这里详见课本P9;
整数部分的十进制转二进制:取出整数部分,每次除以2,余数写在一遍,商继续除以2,直至商为1,将余数按自下而上的顺序写出来,就是二进制数。
八进制和十进制间的转换同上;
十六进制和十进制间的转换同上,但10,11,12,13,14,15分别用A,B,C,D,E,F表示(小写也行);
十六进制的各种数据类型的数字也有不同特征,int型在数字前有 0x 或 0X;
unsigned型在数字后有U或u,无论前面有没有0x,只要后面有U,就是无符号整型;长整型在后面有L或l;
各类常量
1.逻辑型常量:true和false,分别和布尔值1和0对应,用法相同;
2.实型常量:小数形式必须有小数点,其中缺整数部分或缺小数部分都是合法的, .12会被看作0.12,12.会被看作12.0;使用科学计数法,用e或E都可以,但e前一定要有数字(整数浮点数都行),e后一定得是整数,1000应该写成1e3,而不是e3;在程序中直接写出的实型数字,默认为double型,若要表示为float型,可以加上后缀F或f;
3.字符型常量:用单引号括起来的一个字符就是字符型常量,如'a'、'b';
C++中转义符 \ 的用法和python一样,而且\'表示 ' ,\" 表示";
转义符还可以将八进制数和十六进制数转成十进制数在ASCII表上对应的字符,不过只限于在字符型常量使用;
4.字符串常量:用双引号括起来的,和字符型常量的区别在于占用的内存更大;
5.符号常量:也就是宏定义,格式是:#define A n
变量
1.常变量:在程序中,若要使一个变量在接下来的过程中不被修改,也就是保护这个变量的值,就需要将变量说明成常变量,格式是:在变量定义前加上const,例如:const PI=3.14159;要注意常变量定义时必须初始化;
基本运算符和表达式
1.运算符的分类:按运算对象的数量来划分,只对一个对象进行运算称为单目运算符,例如“-”取负运算符;
对三个对象进行运算的运算符称为三目运算符,例如“A?B:C”问号表达式中的条件运算符;
2.对于求余运算,其运算量必须是整型量,例如8.0%3.0为非法运算;
3.优先级相同的运算符,结合性存在特殊情况,“=”赋值运算符的结合性是从右至左,例如a=b=c=1,就是先将1赋值给c,再依次赋值给b和a;
“<”或“>”比较运算符的结合性是从左至右,例如a=1,b=2,c=3,表达式c>b>a的值为0,因为先运算c>b,结果为1,就变成1>a,但显然a=1,所以结果为0;
由此可见,在C++编程中要避免出现三个值同时比较,因为比较运算符的结合性的实际上的结果,会导致逻辑上的错误;
4.位运算符:按位与、或、异或、非运算,就是把十进制数字写成二进制数,再对每一对数进行逻辑运算,结果的二进制数就是位运算的结果;“<<”和“>>”分别是左移和右移的符号,例如左移就是使二进制数整体向左移动,溢出的舍去,空余的位补0;
5.赋值运算符:“=”为赋值运算符,形如 a=1 的表达式就是赋值表达式,整个赋值表达式的值就是变量获取的值;值得注意的是,表达式 a=5+c=6 是非法赋值,因为不能将数值6赋给 5+c ;
6.逗号表达式:逗号表达式的赋值各赋各的,因为是用逗号连接的一个式子,所以整个式子的值为最右边的式子的值,例如 x=1,a=2,8;这个式子的值为8;
7.sizeof(类型或变量名)运算符,其结果为该类值所占的字节数;
8.逻辑运算符的副作用:逻辑运算符一般是从左向右扫描,与运算里只要出现了0就直接返回0,跳过后面的式子,或运算里只要出现了1也是直接返回1并跳过后面的运算;
9.强制类型转换的实质:转换的对象是转换括号里表达式的值,变量的类型和值并未改变;