【C/C++教学专题之009】整数和实数常量

  有了变量的定义,接着就是赋值和计算了。在C/C++中,正确使用常量是正确赋值和计算的首要环节。和基本类型大致相似,常量也可以简单分为整型、实型、字符型。大部分教材当中还会在这里介绍字符串常量,考虑到字符串的本质比较复杂,本专题当中就暂时跳过这个环节。

  整型常量

  除了生活中常用的10进制整数之外,在C/C++中可以直接使用8进制和16进制的整数。

  8进制整数:以数字0开始的整数就被认为是8进制整数,如077等。注意这里的数字是不能超过或者等于8的,如088就是错误的用法。

  提示:8进制整数很容易和10进制整数混淆,因为生活当中在整数最前方加0是无所谓的,但在这里0是区分的唯一标记。

  16进制整数:以数字0和字母X或x开始的整数就被认为是16进制整数,如0XFF等。

  提示:这里的字母X以及A~F,大小写是无所谓的,建议保持同一风格即可。

  整型常量的后缀

  可以在整数的后面加上字母L或者U,分别表示该整数的类型是long和unsigned类型。其实在一般情况下,这样做的意义并不突出,但还是需要简单解释一下。

  1、3L和3的区别:3L被指定为long int类型,而3则是int类型。如果是在现在的计算机当中,两者是完全等价的,但在早期的16位计算机当中,就不完全一样了。这个问题其实和之前解释过的数据类型的区别是一致的。

  在最新的C++标准中,早已经开始支持64位的整数(long long类型),要表示这种类型的整数也可以在整数的最后加上LL或者ll或者i64的后缀。

  2、3U和3的区别:3U被指定unsigned int类型,而3则是int或者signed int类型。其实只有在不同类型的混合运算当中,才会体现出这种写法的意义,但这种所谓的意义是非常“危险”的,如下例所示。

C++代码:

    cout << (3U > -2) << endl;  //结果是0,也就是假
    cout << (3 > -2) << endl;  //结果是1,也就是真

C代码: 

     printf("%d\n",(3U > -2));  //结果是0,也就是假
     printf("%d\n",(3 > -2));  //结果是1,也就是真

  可以看到,3U竟然要比-2要小,而3就比-2要大!这里面的原因我们会在后面的专题“数据类型的三种转换”当中提到。

  总之,这个例子提醒我们尽量回避这种用法,以免出现意料之外的结果。

  实数常量

  在C/C++中实数也有两种用法,第一种和生活当中完全一样直接表示,如3.1415926;第二种称为指数表示法,和科学计数法较类似,可以方便地表示很大或者很小的数。

  指数表示法:将小数写成aeb或者aEb的形式,其数值等价于a*10b。注意这个用法当中,a和b必须不能为空,且b必须是整数。

  另外,标准的科学计数法需要尾数部分一定要大于等于1且小于10,但aeb的用法里没有这个限制,比如100e2。

  实数常量后缀

  在C/C++中出现的实数默认为double类型。如果希望一个实数是float类型,可以在该常量的最后加上f或者F,如3.14f或者1e2F,当然这种需求很少见。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。