概述
练习2.1
1、类型int、long、long long、short的区别
从变量的本质说起,变量就是固定大小内存块的别名。
那么从本质上说,区别其所代表的内存块大小不同。通俗一些,
就是该类型的对象所占内存字节数不相同。
在32位机器上
int占4个字节,long占4个字节,long long占8字节,short占2个字节。
在64位机器上
int占4个字节,long占8个字节,long long占8字节,short占2个字节。
2、无符号和有符号的类型的区别
最好从范围解释
无符号unsigned int 2^0 - 2^32 -1
有符号signed int -2^31 - 2^31 -1
int所代表的内存大小不变,但由于符号,会做以上变换。
3、float和double的区别
双精度double当然在描述浮点数上精度是优于单精度float的。
但实际上不必用到double的精度,而考虑到内存消耗会使用float。
double的描述占内存8个字节
float的描述占内存4个字节
练习2.2
使用double或者float
练习2.3
unsigned u = 10, u2 = 42;
std::cout << u2 - u << std::endl;
std::cout << u - u2 << std::endl;
int i = 10, i2 = 42;
std::cout << i2 - i << std::endl;
std::cout << i - i2 << std::endl;
std::cout << i - u << std::endl;
std::cout << u - i << std::endl;
32 4294967264 32 -32 0 0
练习2.4
解析
以上有问题的可能是第2条
第二条解析
由于unsigned规定该类型运算结果也必须大于零,当一个较小
的unsigned 类型减去一个较大的unsigned 类型,结果向下溢出。
结果就是 该类型的最大值减去向下溢出的值,结果会是一个极大的数值。
拓展:
当两个类型不同的对象进行运算时,会先进行隐式转换,转换方向总是代表内存大的类型。
例子:
char 和 int ,char类型对象会临时转化为int类型进行运算
unsigned 和signed中,signed会先转化为unsigned。
练习2.5
(a): character literal, wide character literal, string literal, string wide character literal.
(b): decimal, unsigned decimal, long decimal, unsigned long decimal, octal, hexadecimal.
(c): double, float, long double.
(d): decimal, unsigned decimal, double, double.
练习2.6
第一行是10进制
第二行 month赋值非法,day是8进制。
练习2.7
(a): Who goes with Fergus?(new line) "string"
(b): 31.4 "long double"
(c): 1024 "float"
(d): 3.14 "long double"
练习2.8
#include <iostream>
using namespace std;
int main()
{
cout << "