前言:

C语言中的数据类型有以下几种
  1.基本数据类型
      (1)整型 
      (2)浮点型//小数 
      (3)字符型//处理现实生活中 符号 文字 
  2.构造数据类型 
  3.指针类型 
  4.空类型 

今天学习的是第一类:基本数据类型以及数据的存储。

在学习前要掌握基本进制间的相互转换。

一.C语言中数据在形式上的分类

主要分为变量和常量。其中在程序运行过程中,其值能被改变的量称为变量,在程序运行过程中,其值不能被改变的量称为常量

二.整形

1. 整型的常量形式:


   123       //十进制 
   0x123     //十六进制 
   0123      //八进制 

2.整形的变量


数据类型 变量名;        //定义变量  (语法)

数据类型 (int/short/long / long long)       
    

变量名  
     名字 (标识符)
           规则:
            1.数字、字母、下划线 
            2.不能以数字开头 
            3.区分大小写 
            4.不要和系统中二级关键字重名 (include define)
            5.不能和C语言中的关键字重名 (32个关键字)
            6.不要和系统中库函数 重名 
            
      int a; //表示定义了一个叫a的int类型的变量
             //意味着此时,在内存空间上,开辟了一个 int型大小的空间,这块空间叫做a 
      有空间后,可以给值
      int a //1.初始化  开空间的同时 给值 
            //2.赋值    

     eg:
      int a; //开了一块空间 
      a=123; //赋值 
      
      空间的大小:
      要看对应的数据类型的大小 
      int       -- 4字节 
      short     -- 2字节 
      long      -- 8字节 
      long long -- 8字节 
      

      sizeof(变量名/数值/类型) //运算符 ---计算机 对应的类型所在空间的大小 ---字节数   

3.整形数据的存储

那数据在存储时是按照什么顺序呢?

字节序问题(字节的顺序问题)

在常见的存储器中存储可以分为大端存储和小端存储,我们主要介绍大端存储,小端存储则与之相反。

大端:

其存储遵循“高高低低”的准则。它的意思就是高位数据 放在高地址处,低位数据 放到低地址处。在学习中常见的大端存储有51单片机等。

小端:

原理不过多介绍,arm芯片默认是小端存储,但其可以通过芯片上的开关改为大端存储。

int a = 123; 
int a = -123;
     123 ? --- 123怎么存到计算机 (转换为二进制存到计算机)
      
      
      unsigned int //无符号的整型  非负数  
      signed   int //有符号的整型  负数 0 正数 
      
      int  //4字节 
      unsigned int //无符号 意味着 这32个位 全部都是 数值位 
      0000 0000 0000 0000 0000 0000 0000 0000
     
      signed int //有符号 意味着 这32个位 被划分位了符号位(最高位) 和 数值位 
      0|000 0000 0000 0000 0000 0000 0000 0000

      正的整数 
      int a = 123; 
      
            
      结论:
        整数 
         都是按照补码的形式存储
         
        正的整数:
          原码 反码 补码 都是一样的 
        
        原码 --- 就是直接用二进制形式表示原有的数值 
        123 
         0000 0000 0000 0000 0000 0000 0111 1011 (原码值)
          0     0    0    0    0    0    7   B
        负的整数
          补码 = 反码 + 1
        -123 
        原码:
          1|000 0000 0000 0000 0000 0000 0111 1011
        反码(原码符号位不变,其余位按位取反):
          1|111 1111 1111 1111 1111 1111 1000 0100 
        补码(反码+1):
          1|111 1111 1111 1111 1111 1111 1000 0101
            f     f    f    f    f    f   8     5
            
        为啥需要补码?
          cpu中只具备加法器,所以我们把所有的运算都转化为加法 
          
          补码 --- 负数 减法 
          12 - 7 = 5
          12 + (-7)   = 5
          12 + (12-7)
          => 12 + 5   = 17 =>5

4.整型数据的溢出
    unsigned short a =65535;
    a = a + 1;
    printf("a = %d\n",a);    
    
    
    0000 0000 0000 0000 
   -                  1
   ----------------------
    1111 1111 1111 1111
   
    1111 1111 1111 1111 + 1
   10000 0000 0000 0000  //溢出 
   
    signed short a = -32768;
    a = a - 1;
    printf("a = %d\n",a);  
    
   结论:
      所在数据范围内的最大值 + 1  ,会变成所在范围的最小值
      所在数据范围内的 最小值 - 1  , 所在数据范围内的 最大值 

4.整型常量指定类型 


      整型常量 默认识别为int类型 
      
      123L   //将123 指定为long类型 
      123LL  //将123 指定为long long 类型 
      123LU  //将123 指定为unsigned long类型 

三.浮点类型(小数)

1.浮点类型的常量形式 


  1.234 
  1.234e3  //科学计数法  1.234 * 10 ^ 3
  1.234E-3 // 1.234 * 10 ^ -3

2.浮点型变量 


  float   //单精度   --- 4字节
  double  //双精度   --- 8字节


3.小数存储到计算机 


eg:

12.125

  step1: 将十进制形式的小数 转换成 二进制形式的效果 
        
         12.125 
         整数 --- 除2取余法 
         小数 --- 乘2取整法
         
         12 ---> 1100
         
         0.125 * 2 = 0.25 ... 0 
         0.25  * 2 = 0.5  ... 0
         0.5   * 2 = 1.0  ... 1
         
        1100.001  
 step2: 将二进制形式小数,写成科学计数法形式 
         1100.001   ==> 1.100001 * 2^3
         
 step3: 按IEEE754标准来存放 
        float 
        
         1位     8位    23位   
        符号位 | 指数位  | 尾数位
        最高位
          0  |3 + 127|
             
             -127
             +128
             10000010 100001
             
        
        0100 0001 0100 0010 0000 0000 0000 0000 
         4     1   4    2    0     0    0   0  

eg:6.125(在代码中实现)


4.浮点型常量指定类型

 1.代码中出现的浮点常量,默认被识别为 double类型
 2.常量有默认的识别类型 


      小数 默认识别为double类型 
 
      0.9f //f表示将0.9识别为float类型 

四.字符型

1.字符型常量 


  'a' //单个字符 


2.字符型变量 


  char  //1字节大小

  char ch = 'a';

3.空间大小


   //1字节大小

4.字符型数据的存储 


  char ch = 'a';

  'a' ---ASCII编码值---97 //还是整数数值

5.ASCII表 


  0~32 没有实际字符形式 (符号)  --- 控制字符
       不可见字符 
       控制效果 
  48~57 数字字符
       '0'~'9' 
       
       数字字符 数值数字 间转换 
         '1' -'0' =>   1 
         1 + '0'  =>   '1' 
  
  65~90  'A'~'Z'
  97~122 'a'~'z'
  
  
  char ch = 'A';
  
  printf("ch = %c\n",ch+32);

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐