/* 数据的表现形式 */
// 常量变量
在计算机高级语言中,数据有两种表现形式:常量和变量
常量
1.整型常量
2.实型常量
a.十进制小数形式,由数字和小数点组成。
b.指数形式
3.字符常量
a.普通字符,用单撇号括起来的一个字符
b.转义字符 \
4.字符串常量,双撇号中的全部字符。单撇号内只能包含一个字符。
5.符号常量,用 # define 指令,指定一个符号名称代表一个常量。如
# define PI 3.1416
使用符号常量好处:
a.含义清楚
b.在需要改变程序中多处用到的同一个变量时,能做到“一改全改”。
# define PRICE 40
变量
变量代表一个有名字的、具有特定属性的一个存储单元。
它用来存放数据,也就是存放变量的值。
变量必须 先定义,后使用。
常变量与常量的异同:
常变量具有变量的基本属性:有类型,占存储单元,只是不允许改变其值。
# define Pi 3.1415926 //定义符号变量
const float pi=3.1415926; //定义常变量
标识符
在计算机高级语言中,用来对变量、符号常量名、函数、数组、类型等命名的
有效字符序列统称为 标识符(identifier)
C语言规定标识符只能由字母、数字和下划线3种字符组成,且第1个字符必须是字母或下划线。
// 数据类型
所谓类型,就是对数据分配存储单元的安排,包括存储单元的长度(占多少字节)
以及数据的存储形式。
// 整型数据
1.整型数据的分类
a.基本整型(int型)
Turbo C 2.0 为每个整型数据分配2个字节(16个二进位)
Visual C++ 为每个整型数据分配了4个字节(32位)
在存储单元中的存储方式是:用整数的补码形式存放。一个正数的补码是此数的二进制形式。
求负数的补码方法:先将此数的绝对值携程二进制形式,然后对其后面所有各二进位按位取反,
再加1。
b.短整型(short int)
Visual C++ 6.0 编译系统分配给int数据4个字节,短整型2个字节。
存储方式与int型相同。
短整型变量的值范围:-32768~32767
c.长整型(long int)
d.双长整型(long long int)
2.整型变量的符号属性
在类型符号前面加上修饰符 unsigned 表示指定该变量是“无符号整数”类型。
如果加上修饰符signed,则是“有符号类型”。
如果既未指定为signed也未指定为unsigned的,默认为“有符号类型”。
unsigned short price = 50; //定义price为无符号短整型变量
printf("%u\n",price); //指定用无符号十进制数的格式输出
unsigned short price = -1; //不能把一个负整数存储在无符号变量中
prinrf("%d\n",price);
系统对 -1 先转成补码形式,就是全部 二进位都是1,然后把它保存在变量price中。
由于price是无符号短整型变量,其左面第一位不代表符号,按“%d”格式输出,就是65535。
// 字符型数据
1.字符与字符代码
各种字符集(包括ASICII字符集)的基本集都包括了127个字符。其中包括:
字母:大写英文字母A~Z,小写英文字母a~z。
数字:0~9。
专门符号29个:
! " # & ' ( ) * + , - . / : ; < = > ? [ \ ] ^ _ { | } ~
空格符:空格、水平制表符(tab)、垂直制表符、换行、换页(form feed)。
不能显示的字符:空(null)字符(以'\0'表示)、警告(以'\a'表示)、退格(以'\b'表示)、
回车(以'\r'表示)等。
大写字母'A'的ASICII代码是十进制数65,二进制形式为 1000001
小写字母'a'的ASICII代码是十进制数97,二进制形式为 1100001
数字字符'1'的ASICII代码是十进制数49,二进制形式为 0110001
空格字符' '的ASICII代码是十进制数32,二进制形式为 0100000
专用字符'%'的ASICII代码是十进制数37,二进制形式为 0100101
转义字符'\n'的ASICII代码是十进制数10,二进制形式为 0001010
127 个字符都可以用 7 个二进位表示(ASICII代码为127时,二进制形式为 1111111,7位全1)。
在C中,指定用1个字节(8位)存储一个字符,此时,字节中的第1位置为 0 。
2.字符变量
字符变量是用类型符 char 定义字符变量。
char c='?';
定义c为字符变量并使初值为字符'?'。'?'的ASICII代码是 63,系统把整数 63 赋给变量c
printf("%d %c\n",c,c);
signed char (有符号字符型),字节数 1,取值范围 -128~127
unsigned char (无符号字符型),字节数 1,取值范围 0~255
如果将一个负整数赋给 signed char(有符号字符型)变量是合法的,但它不代表一个字符,
而是作为一个字节整型变量存储负整数。如:
signed char c=-6;
/* 如果在定义变量时 既不加signed,又不加unsigned,C标准并未规定 是按signed char处理
还是按unsigned char处理,由各编译系统自己决定。*/
char c =255; //把一个128~255之间的正数赋给c
printf("%d\n",c); //按十进制形式赋给c的值
/* 在Visual C++ 系统上进行编译时,系统给出"警告"(warning):"把一个整常数赋给char变量"。
表示255已超过char变量的数值允许范围,在运行时输出-1。说明Visual C++是把 char 默认为
signed char类型的。如果把第1行改为"unsigned char c=255;",则不出现"警告",且输出255。*/
// 浮点型数据
浮点型数据是用来表示具有小数点的实数的。
在C语言中,实数是以指数形式存放在存储单元中的。
一个实数表示为指数,可以有不止一种形式。
由于小数点位置可以浮动,所以实数的指数形式称为浮点数。
小数部分中小数点以前的数字为0、小数点后第一位数字不为0的表现形式称为 规范化的指数形式。
浮点数类型包括 float(单精度浮点型)、 double(双精度浮点型)、 long double(长双精度浮点型)
1.float 型(单精度浮点型)
编译系统为每一个float型变量分配 4 个字节,数值以规范化的二进制数指数形式存放在存储单元中。
2.double 型(双精度浮点型)
用 8 个字节存储一个 double 型数据,可以得到 15 位有效数字
在C语言中进行浮点数的算术运算时,将 float 型数据都自动转换为 double 型,然后进行运算。
3.long double 型(长双精度)型
Turbo C 对 long double 型分配 6 个字节
Visual C++ 6.0 则对 long double 型和 double 型一样处理,分配 8 个字节
/* 怎样确定常量的类型 */
// 整型常量
不带小数点的数值是整型常量。
如在Turbo C中,系统为整型数据分配 2 个字节。其表值范围为 -32768~32767 ,在此范围外的整型常量,
系统会把它作为长整型(long int)处理,分配 4 个字节。
在Visual C++中,-2147483648~2147483647 之间的不带小数点的数都作为 int 型,分配4个字节,在此
范围外的证书,而又在 long long 型数的范围内的整数,作为 long long 型处理。
在一个整数的末尾加大写字母 L 或者小写字母 l ,表示它是长整型(long int)
但在Visual C++ 中由于对 int 和 long int 型数据都分配 4 个字节,因此没有必要用 long int 型。
// 浮点型常量
凡以小数形式或者指数形式出现的实数,是浮点型常量,在内存中都以指数形式存储。
C编译系统把浮点型常量都按双精度处理,分配 8 个字节。
强制制定常量类型:
如在 3.14159 后面加字母F或f,表示是 float 型常量,分配 4 个字节。
如在实型常量后面加大写或者小写的L,指定此常量为 long double
float a=3.14159f; //把此3.14159按单精度浮点常量处理,编译时不出现'警告'
long double a=1.23L //把此1.23作为long double处理
区分类型与变量
每一个变量都属于一个确定的类型,类型是变量的一个重要的属性。
变量是占用存储单元的,是具体存在的实体,在其占用的存储单元中可以存放数据。