最近开始读C++primer,一边看书一边做其中的习题,再CSDN编辑,也算是一种记录。
练习2.1
short ,int ,long,long long都是整数型,但是储存位数不同,分别为16,16,32,64
而unsigned即未定义符号,由于第一个二进制位数通常用来定义正负,所以定义了unsigned则正数范围扩大了两倍。
置于float和double这类浮点数类型的,首先明确浮点数的定义,计算机内部是将其分为阶码部分和尾数部分,通俗的讲,就是把我们十进制的数字变成二进制,再进行科学计数法进行存储。例如:
-10.5=》(-1010.1)=》(-1.0101)x2^3. 到这里是不是感觉和十进制的很相似呢?
转化为这样,float和double的区别要出现了,float型是32位,double是64位。这里既要保存阶码即这里的-3,又要保存尾数部分,由于利用这种方式表达,都可以化为1.xxx,所以只需保存小数点后的位数0101。以float作为例子阶码有符号,称为阶符占一个位,阶码占8个位,位数部分符号占一个位,实际储存占23位
则在计算机内部 0000 0001 1010 1100 0000 0000 0000 0000.
2进制23位折算成十进制单位,则精度大概为6-7左右,最好用计算机敲一下,这样就理解了。
练习2.2利率利用float型,本金和付款可以用int或者float,由于本金和付款一般是整数,而且与float型利率相乘的最终结果是float型
练习2.3-2.4 这里注意unsigned的定义,不会出现负数,可以想象时钟,永远不会出现-1点钟,比如凌晨1点钟-2个小时,应该是昨晚11点钟,推广到计算机内部。一旦出现负数,相当于重新绕一圈。 首先明确unsigned u是 unsigned int 的缩写,所以范围是0-49294967296
所以答案是: 32,4294967264,32,-32,0,0