整型数据
2.3 整型数据
    2.3.1 整型常量
    整型常量可以用十进制、八进制和十六进制等形式表示。
    八进制数,如010011016等。十六进制数用数字0和字母X(或大写字母X)开头,如Ox10OXdeOxf等都是合法的十六进制数。十六进制数中的字母abedef既可以用小写也可以用大写。只有十进制数可以是负数,而八进制和十六进制数只能是正整数
    VC 60中可以在长整型常量的后面加一个字母l(L的小写)L,例如:l23L3451OL123456L等,这些常量在内存中占四个字节。无符号整数在数的末尾应该加上字母后缀uU,若是长整型无符号整型常量,则可以加后缀luLU
    2.3.2 整型变量
    整型变量可以分为基本型(int)、短整型(short int)、长整型(intlong int)、无符号型(unsigned)四种。不同的编译系统为int变量开辟的内存单元大小不同。VC6.0int 变量开辟4个字节(32个二进制位)的内存单元,允许存放的数值范围是:-21474836482147483647整型的变量只能存放整型数值
    若不指定变量为无符号型,则变量隐含为有符号型(signed)
    短整型无符号常量的取值应在065535范围内,长整型无符号常量的取值在04294967295的范围内。注意:无符号常量不能表示成小于0的负数,例如:-200U是不合法的。
    2.3.3 整型数据的分类
    前面介绍的int类型通常称为基本整型。除此之外,C语言中整型数据还有其他三种类型:短整型(short int)、长整型(intlong int)、无符号型(unsigned)。若不指定变量为无符号型,则变量隐含为有符号型(signed)
    不同的编译系统或计算机系统对这几类整型数所占用的字节数有不同的规定。下表显示了TurboC中各种类型的整数的类型说明符及表示数的范围。 
 
    2.3.4 整数在内存中的存储形式
    1、位、字节、字长
    计算机中,内存储器的最小存储单位称为“(bit)”。由于只能存放01,因此称为二进制位。大多数计算机把8个二进制位组成一个“字节(byte)”,并给每个字节分配一个地址。若干字节组成一个“(word)”,用一个“字”来存放一条机器指令或一个数据。一个字含多少个字节随机器的不同而不同,如32位机器、64位机器。
    2、有符号数
    通常把一个字节中的最右边一位称为最低位最左边一位称为最高位。对于一个有符号整数,其中最高位(最左边的一位)用来存放整数的符号,称为符号位。若是正整数,最高位放置0;若是负整数,最高位放置1
    在内存中正整数用“原码”形式存放,负整数是以“补码”形式存放的
    例如,求10000101(十进制数-5)的补码,步骤如下:
    (1)求原码的反码。把原码除符号位之外的二进制码按位取反,即把1变成00变成1,即得到该原码的反码。例如10000101的反码为11111010
    (2)把所得的反码加1,即得到原码的补码。因此11111010111111011,这就是-5在内存中的二进制码。若用两个字节表示,即为:111111*********1
    3、无符号数
    用两个字节存放一个整数时,若说明为无符号整数,则最高位不再用来存放整数的符号,16个二进制位全部用来存放整数,因此无符号整数不可能是负数。这时,若内存中存放的16个二进制位全部为1,则它所代表的整数就不再是-1,而是65535
     【例题分析】
    20093月)若函数中有定义语句:int k;,则( B )
  A)系统将自动给k赋初值
  B)这时k中的值无定义
  C)系统将自动给k赋初值-1 
  D)这时k中无任何值 
    20089月)C源程序中不能表示的数制是( A )
   A)二进制     
  B)八进制   
  C)十进制   
  D)十六进制
    (习题)以下选项中正确的整型常量是( B )
    A12.
   B-20
  C1,000 
  D4 5 6
实型数据
  2.4 实型数据
float几个字节多少位    2.4.1 实型常量
    实型常量又称实数或浮点数。在C语言中可以用两种形式表示一个实型常量。在内存中,实数一律是以指数形式存放的。
    1、小数形式
    小数形式是由数字和小数点组成的一种实数表示形式,例如1.123.123123.0.0等都是合法的实型常量。注意:小数形式表示的实型常量必须要有小数点。
    2、指数形式
    以“e”或“E”后跟一个整数来表示以10为底的幂数。23026可以表示为023026E12.3026e023.026e-1C语言的语法规定,字母eE之前必须要有数字,且eE后面的指数必须为整数。如e3、.5e36、.e3e等都是非法的指数形式。注意:在字母eE的前后以及数字之间不得插入空格
    2.4.2 实型变量
    C语言中实型变量分为单精度型和双精度型两种,分别用类型名floatdouble进行定义。 在一般计算机系统中,为float类型的变量分配4个字节的存储单元,为double类型的变量分配8个字节的存储单元。实型的变量只能存放实型数,不能用整型变量存放一个实数,也不能用实型变量存放一个整数。
    VC 60中单精度实数(float类型)的数值范围约在-10381038之间,并提供7位有效数字位;绝对值小于l0-38的数被处理成零值。双精度实数(double类型)的数值范围约在-1030810308之问,并提供l516位有效数字位,具体精确到多少位与机器有关;绝对值小于l0-308的数被处理成零值。因此double型变量中存放的数据要比float型变量中存放的数据精确得多。注意,在VC 60中,所有的float类型数据在运算中都自动转换成double型数据。
    注意:在计算机中可以精确地存放一个整数,不会出现误差,但实型数的数值范围较整型
大,还往往存在误差。
     【例题分析】
    20093月)以下选项中,能用作数据常量的是( D )
  Ao115 
  B0118 
  C1.5e1.5
  D115L
    (习题)以下选项中正确的实型常量是( B )
    A0
  B3.1415
  C0.329×102 
  D.872
    (习题)以下选项中不正确的实型常量是( B )
    A2.607E-1
   B0.8103 e 2
  C-77.77 
  D456e-2
算术表达式
  2.5 算术表达式
    2.5.1 基本的算术运算符
    C语言中,基本的算术运算符是:+-*、/、%,分别为加、减、乘、除、求余运算符。这些运算符需要两个运算对象,称为双目运算符。除求余运算符%外,运算对象可以是整型,也可以是实型。如l+212*32
    求余运算符的运算对象只能是整型。当运算数为负数时,所得结果的符号随机器的不同而不同。
    +”和“-”也可用作单目运算符,运算符必须出现在运算数的左边。
    说明:
    (1)如果双目运算符两边运算数的类型一致,则所得结果的类型与运算数的类型一致。例如:1020,其运算结果为0512,其运算结果为0
    (2)如果双目运算符两边运算数的类型不一致,系统将自动进行类型转换,使运算符两边的类型达到一致后,再进行运算。在进行双目运算时,若运算符两边的运算数类型不一致,其类型转换规律如下表。
 

    (3)C语言中,所有实型数的运算均以双精度方式进行。若是单精度数,则在尾数部分添0,使之转化为双精度数。
    2.5.2 运算符的优先级、结合性和算术表达式
    C语言中,常量、变量、函数调用以及按C语言语法规则用运算符把运算数连起来的式子都是合法的表达式凡是表达式都有一个值,即运算结果。
    例如:表达式(5+1/2的运算结果是3,圆括号的优先级高于除号;表达式5+1/2的运算结果是5,除号的优先级高于加号;表达式5*-2的运算结果是-10,单目运算符“-”的优先级高于乘号,这个表达式与5*-2)等价。
    用算术运算符和圆括号将运算数(或称操作数)连接起来的、符合C语言语法的表达式称为算术表达式
    算术表达式中,运算对象可以是常量、变量和函数等。例如:2+sqrt(c)*b.
    2.5.3 强制类型转换表达式
    强制类型转换表达式的形式如下:(类型名)(表达式)
     (类型名)称为强制类型转换运算符,利用强制类型转换运算符可以将一个表达式的值转换成指定的类型,这种转换是根据人为要求进行的。例如:表达式(int)32343234转换成整数3;表达式(double)(103)103所得结果l转换成双精度数。
     【例题分析】
    20099月)表达式:(int)((double)9/2)-(9)%2的值是( B )
  A0   
   B3   
   C4   
  D5
    20089月)以下不能正确表示代数式2ab/cdC语言表达式是( D )
    A2*a*b/c/d   
  Ba*b/c/d*2   
  Ca/c/d*b*2   
  D2*a*b/c*d
    20099月)若有语句double x=17;int y;,当执行y=(int)(x/5)%2;之后y的值为 7 。(答案:1
    20093月)表达式(int)((double)(52)+25)的值是6  。(答案:4