首页 > 代码库 > 数据的类型与表示

数据的类型与表示

一、信息的存储单位

   位(bit):度量数据的最小单位,表示1位二进制信息;

   字节(Byte):一个字节由8位二进制数据组成;字节是信息存储中最常用的基本单位,计算机的存储器(包括内存与外存)通常也是以多少字节来表示它的容量;

      1Byte=8bit

      1K=1024B

      1M=1024K

      1G=1024M

   字(Word):字是位的组合,作为一个独立的信息单位处理;字又称为计算机字,它的含义取决于机器的类型、字长以及使用者的要求;常用的固定字长有8位、16位、32位等;

   机器字长:一般指参加运算的存储器所含有的二进制数的位数,代表了机器的精度,如32位、64位等;

 

二、数据类型

   1、字符类型--char

      共包含256个不同的数值,每个数值可以用来代表一个字符(如‘a‘、‘+‘、‘Z‘、‘#‘等);ASCII码表记录所有字符数值两个身份之间的对应关系:

         0--48、A--65、a--97

   2、无符号字符类型--unsigned char

      ‘\n‘--换行

      ‘\r‘--回车符(把打印位置调整到行开头)

      ‘\t‘--制表符(多行打印时所需对齐的内容上下对齐)

      ‘\\‘--表示\

      ‘\"‘--表示"

      ‘\‘‘--表示‘

   3、短整数类型--short

      包含65536个不同的整数,范围从-32768到32767

   4、无符号短整数--unsigned short

      范围从0~65535

   5、长整数类型--long/long int

      包含232个不同的整数,范围从-2----31~231-1

   6、无符号长整数--unsigned long/unsigned long int

      范围从0~232-1

   7、整数类型--int

   8、无符号整数--unsigned int

   9、浮点类型--float/double

      单精度浮点类型(float)能记录的小数点后的数位较少,双精度浮点类型(double)能记录的小数点后的位数较多;

   10、布尔值--bool

      0--false  1--true

   11、不同数据类型所包含的字节数不同:

      char(unsigned char)  --一个字节

      short(unsigned short)  --两个字节

      int(unsigned int)  --四个字节

      long(unsigned long)  --四个字节

      float  --四个字节

      double  --八个字节

 

三、数据类型和占位符的对应关系

   每个占位符必须有一个数值和它对应,数值按照从前向后的顺序依次替换所有的占位符:

      printf("%d+%d=%d\n",num01,num02,num03);

 

   char                        %c和%hhd

   unsigned char          %c和%hhu (%c对应字符身份,%hhd和%hhu对应数字身份)

   short                      %hd

   unsigned short        %hu

   long                        %ld

   unsigned long          %lu

   int                          %d

   unsigned int            %u

   float                       %f或%g

   double                    %lf或%lg (%f和%lf会保留小数点后无效的0,%g和%lg不会保留)

   字符串                     %s

  

   %nd--可作为占位符打印整数,其中n为一个数字,该占位符要求打印结果在屏幕上一定占有n个位置;

   %-nd--作占位符要求有效数字出现在n个位置的左边;

   %0nd--作占位符打印时空出来的位置填字符0;

   %n.mf--作占位符可以打印浮点数据,整个打印结果一共占n个位置,其中小数点后面的部分占m个位置;

   %x/%X--将一个整数的十六进制表示形式打印在屏幕上;%x打印的字母是小写的,%X打印的字母是大写的;

 

四、进位计数之间的转换

   1、二进制<-->十进制

      二进制转换为十进制:

    把二进制表示方式中的所有的1对应的数字找出来,然后求和就得到所对应的十进制表示方式

    (0110 1010)2-->21+23+25+26=(106)10

    (111.11)2-->22+21+20+2-1+2-2=(7.75)10

        十进制转换为二进制:

          将十进制数字不断地进行除2取余的操作直至为0止,然后将操作所得的余数由下至上依次从左(高位)向右(低位)写下来,最后不是8位数位的用0补齐,即为对应的二进制

          (91)10=(0101 1011)2

          (68)10=(0100 0100)2

      十进制小数转换为二进制小数:

         将十进制的小数连续地乘2,得到的整数部分即组成二进制小数

         (0.3125)10=(0.0101)2

            0.3125 x 2 = 0.625

            0.625  x 2 = 1.25

            0.25   x 2 = 0.5

            0.5    x 2 = 1.0

         (68.3125)10=(1000100.0101)2

            分别进行整数部分和小数部分的转换,然后再拼在一起

   2、八进制<-->十进制

      八进制转换为十进制:

         (3506.2)8=3x83+5x82+0x81+6x80+2x8-1=(1862.25)10

      十进制转换为八进制:

         除8取余

   (168)10=(250)8

   3、十六进制<-->十进制

      十六进制转换为十进制:

         (0.2A)16=2x16-1+10x16-2=(0.1640625)10

      十进制转换为十六进制:

         除16取余

         (168)10=(A8)16

   4、二、八、十六进制的相互转换

      (01101101)2=001 101 101=20 22+20 22+20=(155)8

      (1000100)2=0100 0100=22 22=(44)16=0x44

      (1011010.10)2=001 011 010 . 100=20 21+20 21 . 22=(132.4)8

      (1011010.10)2=0101 1010 . 1000=22+20 23+21 . 23=(5A.8)16

      (F)16=(15)10=(1111)2

      (F7)16=(1111 0111)2

  

五、二进制的编码表示

   1、原码

      X=+0101011 -- [X]=00101011

      X=-0101011 -- [X]=10101011

      X=0.1011 -- [X]=0.1011

      X=-0.1011 -- [X]=1.1011

   2、反码

      正数的反码与原码表示相同;负数反码的符号位与原码相同,其余各位取反;

      X=+1100110 -- [X]=01100110 -- [X]=01100110

      X=-1100110 -- [X]=11100110 -- [X]=10011001

      X=0.1011 -- [X]=0.1011 -- [X]=0.1011

      X=-0.1011 -- [X]=1.1011 -- [X]=1.0100

   3、补码

      正数的原码、反码、补码形式相同;负数的补码由该数的反码的最末位加1求得;

      求X=-1010101的补码:

    [X]=11010101 -- [X]=10101010 -- [X]=10101011

      求X=-0.1011的补码:

          [X]=1.1011 -- [X]=1.0100 -- [X]=1.0101

      注意:二进制在进行+1操作时,须遵循以下方法:

         ①当二进制的最右边数位为0时,直接将该数位改为1,即完成+1操作;

         ②当二进制的最右边数位为1时,将二进制从右向左的连续多个1改成0,将遇到的第一个0变成1;

数据的类型与表示