第2章 变量和基本类型
【2】2.1int,long和short类型之间有什么差别?
答:它们的最小存储空间不同,分别为16位、32位和16位。一般而言,short类型为半个机器字长,int类型为一个机器字长,而long类型为一个或两个机器字长(在32位机器中,int类型和long类型的字长通常是相同的)。因此,它们表示的范围不同;
【3】2.3如果在某机器上short类型占16位,那么可以赋给short类型的最大数是什么?unsignedshort类型的最大数又是什么?
答:可以赋给short类型的最大数是2^15-1,即32767;而unsigned short类型的最大数为2^16-1,即65535;
【4】2.4当给16位的unsignedshort对象赋值100000时,赋的值是什么?
答:100000超过了16位的unsigned short类型的表示范围,编译器对其二进制表示截取低16位,相当于对65536求模,得34464;
【5】2.5float类型和double类型有什么差别?
答:二者存储的位数不同(一般而言,float类型为32位,double类型为64位),因而取值范围不同,精度也不同(float类型只能保证6位有效数字,而double类型至少能保证10位有效数字);
【6】2.7解释下列字面值常量的不同之处:L’a’,L”a”,012,0xC,3.14,3.14f,3.14L;-10u,-10e-2;
答:L’a’为wchar_t型字面值;
L”a”为宽字符串字面值;
012为八进制表示的int型字面值;
0xC为十六进制表示的int型字面值;
3.14为double型字面值;
3.14f为float型字面值;
3.14L为long double型字面值;
-10u为unsigned int型;
-10e-2为double型;
【7】2.12区分左值和右值
答:左值就是变量的地址,或者是一个代表“对象在内存中的位置”的表达式;
右值就是变量的值;
【8】2.16假设calc是一个返回double对象的函数,下面哪些是非法定义?
a)int car=1024,auto=2048;:非法,auto是关键字;
b)int ival=ival; :语法没有错,但是这个初始化没有实际意义,ival仍是未初始化的。
c)std::cin>>int input_value;:非法,>>运算符后面不能进行变量定义。
d)double salary=wage=9999.99:同一定义语句不同中不同变量的初始化应分别进行;
e)double calc=calc();
【9】2.17下列变量的初始值(如果有)是什么?
std::Stringglobal_str;
intglobal_int;
intmain(0
{
intlocal_int;
std::Stringlocal_str;
return0;
}
答:global_str和local_str的初始值均为空字符串,global_int的初始值为0,local_int没有初始值;
【10】2.18解释下列例子中的name的意义:
externstd::String name; 说明语句,说明std::String变量name在程序的其他地方定义;
std::Stringname(“abc”); 定义语句,定义了std::String变量name,并将name初始化为”abc”;
externstd::String name(“abc”); 定义语句,定义了std::String变量name,并将name初始化为”abc”.但是这个语句只能出现在函数外部(即,name)是一个全局变量);
【11】2.23下列哪些语句合法?
a)const int buf; 不合法,因为定义const变量(常量)时必须进行初始化;
b) int cnt=0;
constint sz=cnt; 合法;
c)不合法,因为修改了const变量sz的值;
d)int &rvall=1.01; 不合法,因为rvall是一个非const引用,非const引用不能绑定到右值,而1.01是一个右值;
【12】2.32下列声明和定义哪些应该放在头文件中?哪些应该放在源文件中?
a) int var;
b) const double pi =3.1416;
c) extern inttotal=255;
d) const doublesq2=squt(2.0);
答:(a),(c),(d)应该放在源文件中,因为(a)和(c)是变量定义,定义通常应该放在源文件中。(d)中的const变量sq2不是常量表达式的初始化,所以也应该放在源文件中。
(b)中const变量pi是用常量表达式初始化的,应该放在头文件中;