C语言(1)进制,数据类型 整型,浮点型,字符型

 进制:(进位的制度)


       逢几进1 (满几进1)
   
  十进制:
         0  1  2  3  4  5  6  7  8  9
        10 11 12 13  ...            19
        20 ...     

  八进制:
         0  1  2  3  4  5  6  7  
        10 11 12 13  ...    17
        20 ...                 

        
  十六进制:                            // 10 11 12 13 14 15
         0  1  2  3  4  5  6  7  8  9   a   b   c   d   e   f
        10 11 12 13  ...                                          1f
        20 ...         

   
  二进制:
         0  1   
        10 11

        
  十进制 ===> 二进制
     方法: 除2取余法(辗转相除法)
    
     2|123
       2|61      ... 1     (低位)
        2|30     ... 1
         2|15    ... 0
          2|7    ... 1
           2|3   ... 1
            2|1  ... 1
             2|0 ... 1     (高位)
            
              111 1011


   二进制 ===> 十进制
    方法:
        加权求和
           
    64  32  16  8   4   2  1
                               2^1 2^0
    1     1    1   1   0   1   1   =64 + 32 + 16 + 8 + 2 + 1

       
    二进制 => 八进制
    0  1  2   3    4      5     6    7  
    0  1 10 11 100  101 110 111

    对应关系:
       1位八进制数 对应 3位 二进制数
       
       
    001 111 011    
      1     7    3   

    
    二进制 => 十六进制
    对应关系:
       1位十六进制进制数 对应 4位 二进制数
       
    
     0111 1011
        7      b  

      



  数据类型

常量 vs 变量
   常量  "在程序运行过程中", 不能改变的量
   变量  "在程序运行过程中", 能被改变的量

   

整型
   常量形式:

       123      //十进制的整型常量
      0x123    //十六进制的整型常量
      0123     //八进制的整型常量

       整型变量:
  定义变量
     数据类型 变量名; int a
      unsigned / signed int        
      unsigned / signed short
      unsigned / signed long  
      unsigned / signed long long    
  
  变量名:
       是一个名字 --- 标识符
    怎么起名字?
    1.数字、字母、下划线组成
    2.开头不能是数字
    3.不能与关键字重名
    4.不要和预处理命令 及 库函数名重名

数据类型的大小
   表示的是该数据类型 所占内存空间的字节数
   
   int         4字节
   short       2字节
   long        8字节
   long long   8字节

   
sizeof(运算数)

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

                
变量给值
  int a = 10; //定义的同时给值 初始化
  int a;
  a = 10; //赋值
 
  变量之所以能变 --- 变量实际上对应是一块可以被修改的空间
 
 大小端
  小端 高高低低
       高位数据 存在 高地址(地址编号大) 处
       低位数据 存在 低地址 处      
       0x12345678    

  大端 (与小端相反)
  x86 体系结构 --- 小端模式
  51 单片机---大端模式

整型数据的存储
  小端存储
  int a = 123; //00 00 00 7B
    0000 0000 0000 0000  0000 0000 0111 1011 //二进制

补码:
计算机最终存储的都是 他们的补码形式
     正数
             原码 反码 补码 都是一样的     
     负数 原码:本来的码

             反码:原码的符号位不变 其余位按位取反
             补码:反码 + 1

        
          123
    0111 1011 //原码
    0111 1011 //反码
    0111 1011 //补码  


    无符号 --- 表示所有的二进制位 都是数值位
    有符号 --- 表示 有一位(最高位)充当了符号位(1为负,0为正),其余位是数值位
    
      -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  

 

unsigned char a = 65535;
    a [ 1111 1111 1111 1111 ]
           |
  
       %hd //d 表示以有符号十进制形式来打印   h表示half,为打印int类型的一半也就是两个字节
           |
          V
       1|111 1111 1111 1111
           |
          V
    
    最高位是1 表示 这个值 一定是 某个负数 的补码值
        最终打印的一定是原码值

 
        1|111 1111 1111 1111
        1|000 0000 0000 0001  // -1

        
整型类型取值范围
   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字节 


浮点型:


 浮点型 常量形式
  1.23   
  1.23e-4   //科学计数法形式 1.23 * 10^-4
  1.23E-4  //大写也行

 浮点型 变量
  关键字
  float      单精度
  double  双精度   --- 精度
  long double

 
 定义变量

  float f;
 

浮点型 大小
  float 4字节
  double 8字节
  long double 16字节

浮点数的存储
  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 标准 存放  
 
 1位      |             8位           | 23位
 符号位 |         指数位          | 尾数位
 
  0         | 3 (3次方)+ 127(偏移量)     | 100001 //偏移量是为了应对指数为负数的情况,-127对应0000 0000

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

注意
  浮点的比较
  代码中出现的 浮点型常量 默认识别为 double 类型

  代码中出现的变量或常量一定有其对应的数据类型

有什么用呢?
 

float a=0.9;if(a==0.9)是不成立的

因为
  float
  1位 符号位|8位 指数位  |23位 尾数位
             +127
  double
  1位 符号位|11位 指数位 |52位 尾数位
            +1023
 double 精度更高,后面的数更多

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



 
字符型:
  符号 --- 放到计算机中     实际保存的都为0或1的编码序列
  'a' --编码---0110 0001----97
       ASCII
       
  'a' --计算机中保存实际上是这个符号 对应 ascii的编码值
 
  0~32 控制字符(不可见字符)
  48~57 数字字符 '0' ~ '9'
  65~90 英文的26个大写 字母的符号
  97~122 英文的26个小写 字母的符号

 
字符型常量

  'a'  //字符常量 a这个常量

字符型变量
  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]
 
字符型 大小
  一个字节

补充
  char ch = '1';
  printf("%d\n",ch - 48); //数值1  
  printf("%d\n",ch - '0');  //数值1
 
  大写 转 小写  +32

转义字符:
   转义 
   'n'    //字符 n 
   '\n'   //转换含义 --- 表示换行 
   '\t'   //调到下一个制表符  --- 制表符的宽度 8个字符
   '\b'   //退格 
   '\r'   //回车 --效果是光标回到本行开头
  

字符常量:
'A' 
'\101' //转义 八进制 
'\x41' //转义 十六进制 
-----------------------
char ch = 0101;
char ch = 0x41; 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值