从头开始C语言之数据类型和进制之间的转换第二天

一:各进制之间的转换

        进制:我们也把进制叫做进制位,是人们规定的一种进位方式。我们可以使用有限的数字符号来代表所有的数值。可使用的数字符号的数目,我们称为基数。基数为n,则为n进制。数制中某一位上的1所表示数值的大小我们称为位权

(1):十进制转为二进制

                       1).整数部分的转换

                        方法:除2取余法(辗转相除法)

                        

                        

                

             (2)各进制转换为十进制

        ​​​​​​​        ​​​​​​​        ​​​​​​​        

              (3):八进制十六进制转换为二进制

    ​​​​​​​        ​​​​​​​        

        ​​​​​​​        

当给一个二进制数转换为八进制的时候,从右往左取三位二进制数,不足的添零

类如:一个二进制数1010100011

我们可以将它分为001  010 100 011则其对应的八进制数为1243

当给一个二进制数转换为十六进制的时候,从右往左取四位二进制数,不足的添零

类如:一个二进制数1010100011

我们可以将它分为0010 1010  0011则其对应的八进制数为2a3

知道对应关系后我们就能在二进制,八进制,十六进制之间可以进行灵活转换。

二:数据类型

        c语言的数据类型可以分为基本数据类型,构造数据类型,指针类型和空类型。我们先来熟悉一下基本数据类型,基本数据类型可以分为整型,浮点型,字符型和枚举型。

(1):整型

                常量形式123                十进制整型常量

                                0x123           十六进制整型常量

                                0123             八进制整型常量

                整型变量

                        数据类型        变量名;

                        常用数据类型为:   int 

                                                        short

                                                        long

                                                        long long

                                上述变量名都有正有负,也可以只定义为正数,在前面加上unsigned即可,一般定义下有符号的signed可以省略。

                        变量名:是一个名称-----标识符

                                (1):数字,字母,下划线组成。

                                (2):开头不能是数字。

                                (3):不能与关键字重名。

                                (4):不要和预处理命令和库函数名重名。

                数据类型的大小

                                                        int                        四个字节 

                                                        short                    二个字节

                                                        long                     八个字节

                                                        long long             八个字节                

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        

                           sizeof(运算数) 计算运算数所代表的数据类型占用的内存空间的字节数 
                                 运算数 可以是一个类型名
                                                         sizeof(int)
                                                                可以是变量名 
                                                                 sizeof(a) 
                                                                可以是个常量或表达式
                                                                sizeof(10)
                                                                sizeof(a+10) 

                        整数在内存中的存储方式为小端存储,即高位数据存在高地址处。

          整数 
     计算机最终存储的都是 他们的补码形式 
     
     
     正数
         原码 反码 补码 都是一样的      
     负数
         补码为反码 + 1
   正数 123 
    0111 1011 //原码
    0111 1011 //反码 
    0111 1011 //补码

    负数 -7 
  1|000 0000 0000 0000 0000 0000  0000 0111 //原码 
  1|111 1111 1111 1111 1111 1111  1111 1000 //反码 
  1|111 1111 1111 1111 1111 1111  1111 1001 //补码
   f     f    f    f    f    f     f     9  
  负数的反码 是 原码 的符号位不变 其余位按位取反 

整型类型取值范围 
   int         4字节     
               unsigned int  0~2^32-1
               signed int  -2^31 ~ 2^31- 1
   short       2字节   
               unsigned short 0~2^16-1 //65535
               signed short   -32768 ~ 32767 
   long        8字节
   long long   8字节 

(2):浮点型

1.浮点型 常量形式 
  1.23   
  1.23e-4   //科学计数法形式 1.23 * 10^-4
  1.23E-4 
2.浮点型 变量 
  关键字 
  float   单精度 
  double  双精度   --- 精度 
  long double 
  
  定义变量
  float f; 
 
3.浮点型 大小 
  float 4字节 
  double 8字节 
  long double 16字节

4.浮点数的存储 
  12.125  //存到计算机 
  
  step1: 首先 将十进制形式的小数,写成 二进制形式的小数 
         
         整数 
              除2取余法  
         小数部分
              乘2取整法
 
       12 --- 1100
   
     0.125 * 2 = 0.25 --- 0
     0.25  * 2 = 0.5  --- 0
     0.5   * 2 = 1    --- 1
     0.001 
  
    二进制形式
    1100.001 
 step2: 将二进制形式的小数 写成 科学计数法形式 
        
    1100.001   => 1.100001 * 2^3 

step3: 按照 IEEE 754 标准 存放 

IEEE 754标准 

  float 
  1位 符号位|8位 指数位  |23位 尾数位 
             +127
  double 
  1位 符号位|11位 指数位 |52位 尾数位
            +1023 

 1位    | 8位 充当 指数位   | 23位 
 符号位 |                   | 尾数位 
  
  0         3 + 127(偏移量)  100001

  0100 0001 0100 0010 0000 0000 0000 0000   // 12.125 存到计算机中的样子 
   4     1   4    2    0    0    0    0   

(3):字符型

                  符号 --- 放到计算机中 

                  'a' --计算机中保存实际上是这个符号 对应 ascii的编码值  
                  0~32 控制字符(不可见字符) 
                  48~57 数字字符 '0' ~ '9'
                  65~90 英文的26个大写 字母的符号 
                  97~122 英文的26个小写 字母的符号

                1).字符型常量 
                  'a'  //字符常量 a这个常量 

                2).字符型变量 
                  char  
  
                  char ch; //一个字节 
  
                  char ch = 'a';  
       
                  ch这个变量中 最终放的放的实际上是 'a' 对应的ascii码 值  (整型)
       
                  char  //tiny int --小整型 
  
                  char 也一种整型类型 说char和整型之间是通用的 
  
                  unsigned char ch;   //[0    ~ 255]
                  signed char a = 10; //[-128 ~ 127]
                  a = -10;  

  char ch = '1'; 
  printf("%d\n",ch - 48); //数值1  
  printf("%d\n",ch - '0'); //数值1

将字符1转换为了数字1

四:重点

  整数的溢出  
  整数 存储 和 使用 分开的 
  
  unsigned short a = 65535;   //1111 1111 1111 1111 
  unsigned short b = -65535;  
  1 1111 1111 1111 1111 
  1 0000 0000 0000 0001

 

  浮点的比较 
  
  代码中出现的 变量 或 常量 一定有其对应的数据类型
  
  代码中出现的 浮点型常量 默认识别为 double 类型 
  
  
  0.9  *  2 = 1.8 --- 1
  0.8  *  2 = 1.6 --- 1
  0.6  *  2 = 1.2 --- 1
  0.2  *  2 = 0.4 --- 0
  0.4  *  2 = 0.8 --- 0
  0.8  *  2 = 1.6 --- 1
  
  .... 
  1.1101 ... * 2 ^ n 

  浮点数的比较:
      保证精度一致 
      类型一致
      
  常量也可以指定类型:
  0.9f //表示被识别为 float类型 
  123 //默认识别为 int类型 
  123L //识别为long类型 
  123LU //unsigned long 
  123LL //long long 
  123LLU //unsigned long long 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值