对于 unsigned 类型来说,编译器必须调整越界值使其满足要求。编译器会
将该值对 unsigned 类型的可能取值数目求模,然后取所得值。
为什么-1%256等于255?
取模运算时,对于负数,应该加上被除数的整数倍,使结果大于或等于0之后,再进行运算.
对于上例:
-1+256=255,然后用255%256,结果就是255.
当然也可以-1+512=511,511%256的结果也是255.
对于上例:
-1+256=255,然后用255%256,结果就是255.
当然也可以-1+512=511,511%256的结果也是255.
他们的表示数据范围有差别: 在c语言中:int 两个字节,也就是16位,所以它的范围是2^16-1有符号的是-2^15~2^15-1 short 一个字节,8位。范围类推啦; long 4个字节,32位。 在c++中: int 四个字节; short 2个字节; long -2^63 —— 2^63-1
如果在某机器上 short 类型占 16 位,那么可以赋给
short 类型的最大数是什么?unsigned short 类型的最
大数又是什么?
short:
2^15-1 即32767
unsigned short:
2^16-1 即65535
Exercise2.5:float 类型和 double 类型有什么差别?
基本上没有什么区别,都是表示小数 不过它们的宽度不一样,或者说精度不一样,float是单精度,double是双精度 它们表示小数的范围不一样,double能表示的范围,比float大 double在内存中,占8个字节,float占4个字节 float和double的关系就像short跟long的关系一样
Exercise 2.6:
要计算抵押贷款的偿还金额,利率、本金和付款额应分别选用哪种类型?解释你选择的理由。
利率可以选择 float 类型,因为利率通常为百分之几.一般只保留到小数点后 两位,所以 6 位有效数字就足以表示了. 本金可以选择 long 类型,因为本金通常为整数.long 类型可表示的最大整数一 般为 2^31-1(即 2147483647),应该足以表示了. 付款额一般为实数,可以选择 double 类型,因为 float 类型的 6 位有效数字可 能不足以表示.
换行符 \n 水平制表符\t纵向制表符 \v 退格符 \b
回车符 \r 进纸符 \f
报警(响铃)符 \a 反斜线 \\
疑问号 \? 单引号 \'
双引号 \"
Exercise2.10:
使用转义字符编写一段程序,输出 2M,然后换行。修改
程序,输出 2,跟着一个制表符,然后是 M,最后是换行
符。
使用转义字符编写一段程序,输出 2M,然后换行。修改
程序,输出 2,跟着一个制表符,然后是 M,最后是换行
符。
#include "StdAfx.h"
#include <iostream>
#include "Sales_item.h"
using namespace std;
int main()
{
cout<<"2M\n";
cout<<"2\t"<<"M\n";
int i;cin>>i; //固定窗口在输入
return 0;
}
Exercise2.11:
编写程序,要求用户输入两个数——底数(base)和指数
(exponent),输出底数的指数次方的结果。
编写程序,要求用户输入两个数——底数(base)和指数
(exponent),输出底数的指数次方的结果。
#include "StdAfx.h"
#include <iostream>
#include "Sales_item.h"
using namespace std;
int main()
{
int <span style="font-size:18px;">base</span>=0,exponent=1;
long result=1;
cout<<"请输入底数:\t";
cin>>base;
cout<<"请输入次方数:\t";
cin>>exponent;
for(int cnt=0;cnt!=exponent;++cnt)
result*=base;
cout<<base<<"的"<<exponent<<"次方等于:\t"<<result;
int i;cin>>i;
return 0;
}
次方输入过大就会产生数据溢出,得到1.#inf