c++之数据处理(一)

1.变量名

c++命名规则:
  • 在名称中只能使用字母字符、数字和下划线
  • 名称的第一个字符不能是数字
  • 区分大写字符和小写字符
  • 不能将c++关键字作为名称
  • 以两个下划线或下划线和大写字母打头的名称保留给实现(编译器极其使用的资源使用),以一个下划线开头的名称被保留给实现,用作全局标识符。
  • c++对名称的长度没有限制,名称中的所有字符都有意义,但有些平台有长度限制
2.典型的整型溢出行为

C++中常用的数据类型有整形,字符型,浮点型(单精度和双精度)等等。
其中基本整形(按长度递增的顺序排列)分别是 char、short、int和long,其中每种类型都有符号版本和无符号版本,因此总共有8种类型可供选择。但是char类型常用来表示字符,而不是数字。
在C++中short、int、long它们的长度:
short至少16位(8位=1个字节);
int至少与short一样长;
long至少32位,且至少与int一样长。
整型溢出行为:
在这里插入图片描述

输出结果:
a=32767b=32767
a=-32768b=32768
(注:a是有符号整形变量而b是无符号整形变量,一个short变量和一个unsigned short变量他们打长度都为16位,short变量的取值范围是-32768-32767,而unsigned的取值范围是0~65535)
在这里插入图片描述

当是有符号时,其最大值为+32767,再+1之后就会溢出为-32768;当为无符号整数时就无影响,继续+1为32768.

3.整型字面值

整型字面值(常量)是显式的书写的常量
和C相同,C++能够以三种不同的计数方式来书写整数,基数为10,基数为8(老式UNIX版本),基数为16(硬件黑客的最爱)。

C++表示法:
C++使用前一位(两)来标识数字常量的基数。如果第一位为1-9,则基数为10,因此93是以10为基数的。
如果第一位是0,第二位为1-7,则基数是8.因此042的基数为8.他相当于十进制中的34.

如果前两位为0x或者0X,则基数为16(十六进制)。对于16进制,a-f和A-F表示了16进制位对应于10-15.0xF为15.0xA5为165(10个16加5个1)。

但是在C++中 cout 的默认输出是10进制,如果要按照8进制或者16进制输出的话可以使用cout的一些特殊特性。
前面指出过的头文件iostream提供了控制符endl,用于指示cout重起一行。同样它还提供了控制符dec,hex,oct。

dec:10进制输出,
hex :16进制输出,
oct:8进制输出。
例如下列代码所示:
在这里插入图片描述

运行结果如下图所示
在这里插入图片描述

诸如cout<<hex等代码不会在屏幕上显示任何内容,而只是修改cout显示整数的方式,因此,控制符hex实际上是一个消息,告诉cout采取何种行为。另外,由于标识符hex位于名称空间std中,而程序使用了该名称空间,因此不能将hex作为变量名,然而,如果省略编译指令using,而是用std::cout、std::endl、std::hex、std::oct,则可以将hex用作变量名(但是要注意的是:在你修改格式之前原来的格式将一直有效)

4.const限定符

如果程序在多个地方使用同一个常量,只需要修改一个符号定义就可以,常用的方法有#define和const。
他们的区别主要有:
例如#define NUM=255定义的常量是没有类型的,所以给出的是一个立即数,编译器在编译的时候进行替换,只要有常量的地方就进行拷贝替换
const int MAX=255;定义常量有类型的名字,存放在静态区域,在程序运行中const只有一个拷贝,而#define有多个拷贝,消耗内存比const大得多
define定义的常量是不可以用指针变量去指向的,用const定义的常量是可以用指针指向该常量地址的
define可以定义一些简单的函数,const是不可以定义函数的
具体的区别有:

  • 编译器处理方式
    define – 在预处理阶段进行替换
    const – 在编译时确定其值

  • 类型检查
    define – 无类型,不进行类型安全检查,可能会产生意想不到的错误
    const – 有数据类型,编译时会进行类型检查

  • 内存空间
    define – 不分配内存,给出的是立即数,有多少次使用就进行多少次替换,在内存中会有多个拷贝,消耗内存大
    const – 在静态存储区中分配空间,在程序运行过程中内存中只有一个拷贝

(eg: 例如:

    #define PI 3.14159 //常量宏  
    const doulbe Pi=3.14159; //此时并未将Pi放入ROM中 
    double i=Pi; //此时为Pi分配内存,以后不再分配!  
    double I=PI; //编译期间进行宏替换,分配内存  
    double j=Pi; //没有内存分配  
    double J=PI; //再进行宏替换,又一次分配内存!  
    const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而 #define定义的常量在内存中有若干个拷贝。 )
  • 其他
    在编译时, 编译器通常不为const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。
    宏替换只作替换,不做计算,不做表达式求解。

(注:宏定义的作用范围仅限于当前文件。 默认状态下,const对象只在文件内有效,当多个文件中出现了同名的const变量时,等同于在不同文件中分别定义了独立的变量。 如果想在多个文件之间共享const对象,必须在变量定义之前添加extern关键字(在声明和定义时都要加)。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艰默

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值