记得要小心

来源:互联网 发布:产业结构的优化升级 编辑:程序博客网 时间:2024/04/28 12:29

发表文章的时候要小心,就如同使用变量的时候要很小心 :)

C++定义了一组表示整型、浮点数、单个字符和布尔值的算术类型,也定义了一种称为void的特殊类型,void没有对应的值,仅用在有限的一些情况下,作无返回值函数的返回类型.

表示整数、字符和布尔值的算术类型统称为整型.字符类型有两种,char和wchar_t

char类型保证了有足够空间能够存储机器基本字符集中任何字符相对应的数值.因此,char 类型通常是单个机器字节(byte).wchar_t用于扩展字符集,比如汉字和日语.这些语言的字符集中的一些字符是不能用单个char表示出来的

short、int和long都表示整型值,存储空间不同而已.一般的,short类型为半个机器字(word)长,int类型为一个机器字长,而long类型为一个或两个机器字长(在32位机中int类型根long类型通常字长都相同的)

bool类型表示真值true和false,可以将算术类型的任何值赋给bool对象.0值代表false,非0代表true.

当然,上面说的类型除了bool之外,还有无符号数和有符号数之分.带符号数既可以表示正数也可以表示负数,而无符号数只能表示大于或等于0的数.

整型int、short、long都默认为带符号数,如果要获得无符号数则必须加以制定.   unsigned long就是无符号数的long类型.  唯独unsigned int可以简写为unsigned而不用加任何说明 - -

整型值的表示问题,比如你定义了一种类型使用8位表示,则这种类型的unsigned型可以取值0到255.signed的话,   从-127到127,也有许多实现允许取值从-128到127的.  一般的,sign的第一位是符号位,符号位为1,则其值为负数,符号位为0,则值为0或者正数.一个signed整型取值是从-128到127的.

我们再来看看赋值问题.既然我们定义的类型有取值范围,那我们如果赋给它一个超出范围的数字,结果会怎样?我们给一位8位表示的类型赋给355,编译器将会去该值对256求模后的值.结果是99.对于unsigned类型来说,负数总是超过它范围的.有些语言里面将负数赋给unsigned是非法的,但是在C++里面这是合法的.这里有点疑问,这样有什么意义?

下面看看浮点型,不是TT的类型 - -别想歪 ....

浮点型分单精度浮点型float、双精度浮点型double、扩展精度浮点型long double.一般的,float类型用一个字(32位)来表示,double类型用两个字(64位)表示,long double类型则用三个或四个(96位或128位)来表示.类型的取值范围决定了浮点数所含的有效数字位数.

对于实际应用来说,float类型通常是不够的,它只能保持六位有效数字,double则至少可以保持10位有效数字,能满足大部分计算的要求.long double的话,则有可能要增加额外的运行代价.

习题:要计算抵押贷款的偿还金额,利率、本金和付款额应分别选用什么类型,解释一下理由

因为利率一般都是百分之几这些,所以用float够用了,而本金一般都是整数,用long 类型可以了,长整型提供2的32次方大小数字,够用了,而付款额一般为实数,提款的人估计也不敢一次提太多 - - 用double好不好?10位有效数字了 -.-

字面值常量也是一个重要的内容.这就是编程里面涉及到的常量,比如20,在程序中当作字面值常量,它的数值不能修改,每个字面值都有相应的类型.比如,0是int型,3.1415926是double型,只有内置类型存在字面值,没有类类型的字面值,也没有任何标准库类型的字面值.

整形字面值规则:  三种进制的表示,  20是十进制,如果在它前面加上0的话,020就是八进制了,如果在前面加上0x或者0X的话,那就是表示16进制了,0x20,0X20.字面值整数常量的类型默认为int或long类型,其精度类型取决于字面值,适合int的就是int类型,比int大的就是long类型.通常在数值后面加上L或者l(小写)制定常量为long类型.

注意,定义长整型时,应该使用大写的L,因为...小写的英文l跟数字1分不清.

浮点字面值规则:可以用十进制或者科学计数法来表示浮点字面值常量.使用科学计数法的时候,指数用E或者e表示.默认的浮点字面值常量为double类型,在数值后面加上F或者f表示单精度,加上L或者l表示扩展精度(使用大写L好).

3.14159F跟3.14159E0f是一样的.   .001f跟1E-3F也是一样的, 12.345L跟1.2345E1L一样.  0.跟0e0也是一样的.

再来看看非打印字符的转义序列.

/n表示换行符,/r表示回车符./a表示报警符(响铃)

我们可以将任何字符表示为以下形式的通用转义字符.    /000  (000表示三个八进制数字.)

ASCII码字符集表示的字面值常量:  /7(响铃符)  /12(换行符)   /40(空格符)  /0(空字符)  /115('M')

同样,也可以用十六进制转义字符来定义字符:  /xddd, 一个反斜线符、一个x和一个或多个十六进制数字组成.

字符串字面值,这是一种很复杂的字面值.是一串常量字符.

"hello world"  ""(空串)  C++中所有的字符串字面值都由编译器自动在末尾添加一个空字符.

字符串字面值的连接,看看下面:

std::cout<<"a multi-line "
      "string literal "
   "using concatenation "
   <<endl;

结果是输出:  a multi-line string literal using concatenation

注意:字符字面值根宽字符字面值是不能连接的.会出错.

Ctrl+A,Ctrl+C

点发表,哇咔咔

原创粉丝点击