在计算机高级语言中,数据有两种表现形式:常量和变量。
在程序运行过程中,其值不能被改变的量称为常量。数值常量就是数学中的常数。
如1000 ,145, 0,-100,25等都是整型常量。
1.十进制小数形式,由数字和小数点组成。如123.456,0.345,-56.78等。
2.指数形式。如12.3e5,-65E9等。E或e前后必有数,E或e后面必为整数。
1.用单撇号括起来的一个字符,比如 ‘a’,‘A’,‘3’,‘?‘,’#’,不能写成‘ab’或者‘AB’。
请注意单撇号只是界限符,字符常量只能是一个字符,不包括单撇号。字符常量存储在计算机存储单元中时,并不是存储字符。而是以其代码(一般用ASCII码)存储的。ASCII码如下:
2.转义字符。除了以上形式的字符常量外,c语言还允许用一种特殊形式的字符,常量就是以字符‘\’开头的字符序列。以下为转义字符及其作用:
3.字符串常量。用双撇号可以把若干个字符括起来,字符串常量是双撇号中的所有字符,但不包括双撇号本身。
整型数据
1.整型数据的分类
本节介绍最基本的整型类型。
(1)基本整型(int型)
编译系统分配给int型数据2个字节或4个字节(由具体的C编译系统自行决定)。如Turbo C 2.0为每一个整型数据分配2个字节(16个二进位),而Visual C++为每一个整型数据分配4个字节(32位)。在存储单元中的存储方式是:用整数的补码(complement)形式存放。一个正数的补码是此数的二进制形式,如5的二进制形式是101,如果用两个字节存放一个整数,则在存储单元中数据形式如图3.5所示。如果是一个负数,则应先求出负数的补码。求负数的补码的方法是:先将此数的绝对值写成二进制形式,然后对其所有二进位按位取反,再加1。如-5的补码见图3.6。
5的补码
0 0 0 0 0 0 0 0
0 0 0 0 0 1 0 1
图 3.5
5的原码
0 0 0 0 0 0 0 0
0 0 0 0 0 1 0 1
(a)
按位取反
1
1
1
'
1
'
1
1
1
1 1 1 1 0 1 0
(b)
再加1
1
1
1
(-5的补码)
1
1
1 1 1 0 1 1
(c)
图 3.6
在存放整数的存储单元中,最左面一位是用来表示符号的。如果该位为0,表示数值为正;如果该位为1,表示数值为负。
有关补码的知识不属本书范围,在此不深入介绍,如需进一步了解,可参考有关计算机原理的书籍。
说明:如果给整型变量分配2个字节,则存储单元中能存放的最大值为01111111111111111,第1位为0代表正数,后面15位为全1,此数值是( ( 2¹ ⁵-1) , 即十进制数32767。最小值为1000000000000000,此数是 —2¹ ⁵, 即-32768。因此一个整型变量的值的范围是-32768~32767。超过此范围,就出现数值的“溢出”,输出的结果显然不正确。如果给整型变量分配4个字节 (Visual C++), 其能容纳的数值范围为-2³¹∼(2³¹-1),即-2147483648~2 147483 647。
(2)短整型(short int)
类型名为short int或short。如用Visual C++,编译系统分配给int数据4个字节,短整型2个字节。存储方式与int型相同。一个短整型变量的值的范围是-32768~32767。
(3)长整型(long int)
类型名为long int或long。Visual C++对一个long型数据分配4个字节(即32位),因此long int型变量的值的范围是-2³¹∼(2³¹-1),即-2147 483 648~2147483 647。
(4)双长整型(long long int)
类型名为long long int或long long,一般分配8个字节。这是C99新增的类型,但许多C编译系统尚未实现。
说明:C标准没有具体规定各种类型数据所占用存储单元的长度,这是由各编译系统自行决定的。C标准只要求long型数据长度不短于int型,short型不长于int型。即
sizeof(short)≤sizeof(int)≤sizeof(long)
sizeof是测量类型或变量长度的运算符。在Turbo C 2.0中,int型和short型数据都是2个字节(16位),而long型数据是4个字节(32位)。在VisualC++中,short数据的长度为2字节,int数据的长度为4字节,long数据的长度为4字节。通常的做法是:把long定为32位,把short定为16位,而int可以是16位,也可以是32位,由编译系统决定。读者应了解所用系统的规定。在将一个程序从A系统移到B系统时,需要注意这个区别。例如,在A系统,整型数据占4个字节,程序中将整数50000赋给整型变量price是合法的、可行的。但在B系统,整型数据占2个字节,将整数50000赋给整型变量price就超过整型数据的范围,出现“溢出”。这时应当把int型变量改为long型,才能得到正确的结果。
2.整型变量的符号属性
以上介绍的几种类型,变量值在存储单元中都是以补码形式存储的,存储单元中的第1个二进位制代表符号。整型变量的值的范围包括负数到正数(见表3.2)。
表3.2 整型数据常见的存储空间和值的范围(Visual C++的安排)
类型 字节数 取值范围
int(基本整型) 4 -2147483648~2147483647,即- -2³¹~(2³¹-1)
unsigned int(无符号基本整型) 4 0~4294967295,即0~(2³²-1)
short(短整型) 2 -32768~32767,即· -2¹⁵~(2¹⁵-1)
unsigned short(无符号短整型) 2 0~65535,即0~(2¹⁶-1)
long(长整型) 4 -2147483648~2147483647,即-2³¹~(2³¹-1)
unsigned long(无符号长整型) 4 0~4294967295,即0~(2³²-1)
long long(双长型) 8 -9223372036854775808~9223372036854775807 即-2⁶³~(2⁶³-1)
unsigned long long (无符号双长整型) 8 0~18446744073709 551615,即0~(2⁶⁴-1)
在实际应用中,有的数据的范围常常只有正值(如学号、年龄、库存量、存款额等)。为了充分利用变量的值的范围,可以将变量定义为“无符号”类型。可以在类型符号前面加上修饰符unsigned,表示指定该变量是“无符号整数”类型。如果加上修饰符signed,则是“有符号类型”。因此,在以上4种整型数据的基础上可以扩展为以下8种整型数据:
flout 3 2 -3 .4 ×1 0 8 ~3 、4 0 ×1 0 3 8 (7位有效数字).
以上就是今天分享的全部内容。