变量 + 数据类型

打印 上一主题 下一主题

主题 558|帖子 558|积分 1674

变量:


  • 什么是变量?一个可以存储数据(存储的地方在内存中),并可以在代码的运行中,给与数据的改变
  • 注意:变量的声明必须在最前面
  • 语法:数据类型 变量名称 = 值;
  • 案例:
  • %d - 输出一个整数   %.2f - 输出一个小数(2代表的是小数位,可以改变)
  • %c - 输出一个字符   %s - 输出一个字符串
    1. //引入头文件
    2. #include <stdio.h>
    3. void main(){
    4.     int num = 1;  //给num变量赋值1
    5.     double score = 2.3;
    6.     char gendr = 'A';
    7.     char name[] = "我是字符串";  
    8.     //注意:改被值的内容,要放到所有变量声明的后面
    9.      //因为c语言的变量声明必须在最前面,num = 2已经不是变量声明
    10.     num = 2; //改变a变量值
    11.     printf("num=%d score=%.2f gendr=%c name=%s",num,score,gendr,name);
    12.     getchar();//让窗口停留(cmd窗口)
    13. }
    复制代码
  • 内存分析:

    • 不同的变量,改成(不同的数据)  - 画图时搞错  



  • 细节:

    • 变量表示内存中的一个存储区域,(不同的数据类型,占空间也不一样)
    • 变量必先声明,后使用
    • 变量名,在同一个作用域不能重名
    • 同一类型,并同一区域的变量,可以不断变化(不遵守,可能导致数据丢失)  

 数据类型:


  • 什么是数据类型?用来表示一个数据是什么类型,并在内存中分配对应的类型空间大小,不同的类型分配的内存大小也不一样
  • 有哪些数据类型? - 记下来 

    • 注意:在C语言中没有字符串类型,用字符数组表示字符串
    • 在不同的系统上,部分的数据类型长度不一样,如int可能是2或4      




  • 整数类型:

    • 整数类型的作用? 用来存放整数,负整数和正整数都可以,但不同的整数可以存放的值范围也不同

      • 如:int 在系统上是2个字节值范围就是:-32768到32767 (如果超过该值,就会出现越界的问题,导致数据混乱)
      • 如:int在系统上是4个字节值范围就是:-214483648到2147483647

    • 为什么会同样是int分2个字节和4个字节?

      • 因为跟操作系统、系统位数、编译器有关   

    • C语言的数据类分有符号和无符号?

      • 有符号 sigend int  - 等价于int - C语言默认是带符号 - 其它数据类型也分有无符号,不止是int类型有
      • 无符号  unsigned int - 值范围 - 0到65636 - 占2个字节
      • 区别:

        • 值范围不同,主要原因底层二进制分析不同       


    • 案例: 
      1. #include <stdio.h>
      2. void main(){    int i = 2147483647;
      3.     signed int j = 2147483648; //越界
      4.     unsigned int q = 999999655351; //越界
      5.     printf("int的字节数=%d\n",sizeof(int));
      6.     printf("i=%d j=%d q=%d",i,j,q);
      7.     getchar();//让窗口停留(cmd窗口)
      8. }
      复制代码
    • 整数类型细节:

      • C程序中整数说明一般用int型,不够在使用long或者long long

        • long的输出是 %ld 
        • long long的输出是 %lld

      • bit(位):计算机中最小的存储单位
      • byte(字节):计算机中基本的存储单位
      • 1byte=8bit


  • 浮点类型:

    • 浮点数的作用?用来表示一个小数,如:123.1,99.9等
    • 浮点数又分两个精度?

      • float-单精度:存储大小(4给字节),值范围1.2E-38到3.4E+38,精度是6位小数(是点后面的数)
      • double-双精度:存储大小(8个字节),值范围2.3E-308到1.7+308,精度是15位小数(是点后面的数)

    • 浮点类型细节:

      • 浮点型常量默认为double型,声明float型常量时,必须加‘F’或'f'

        • float i = 1.1; - 就算这样声明其实也double型,必须是 float i = 1.1f;才是float型
        • 不然会有这么一句话:“初始化”: 从“double”到“float”截断

      • 浮点型有两种表达形式:    

        • 十进制:如:5.12、5.20 
        • 科学计数法:如:5.12e2 、5.12E-2  

      • 通常情况下用double型,因为精度比float高

        • double可以输出15位小数,float6位,如果超过小数会数据混乱  

      • 输出浮点型时默认小数保存6位

      1. //引入头文件
      2. #include <stdio.h>
      3. void main(){
      4.     float a = 10.1; //“初始化”: 从“double”到“float”截断
      5.     float a2 = 10.2f;
      6.     double b = 10.2;
      7.     double b2 = .521;//等价于0.521
      8.     double c = 5.21e2;//等价5.12*(10^2) = 521
      9.     double c2 = 5.21e-2;//等价5.12*(10^-2)= 5.12/100= 0.0521
      10.     printf("b=%.15f b2=%f",b,b2);//输出默认保存6位小数,.15是15位小数
      11.     getchar();
      12. }
      复制代码

  • 布尔类型:

    • 布尔类型作用? 代表真(true)和假(false),一般使用场景条件控制(if),循环控制(while)
    • C语言(C89)没有定义布尔型,通过0代表假,非0代表真的(负整数也算)

      • 因为是数字表示,非常的不直观,可以通过宏定义来完成真假操作

    • C语言(C99)提供了_Bool型,_Bool型仍是整数型,接收0和非0,不是非0的数都会被存储为1
      1. //引入头文件
      2. #include <stdio.h>
      3. //使用宏定义来完成
      4. #define BOOL int //定义BOOL为整型
      5. #define TURE 1 //TURE等价于1
      6. #define FALSE 0 //FALSE等价于0
      7. void main(){
      8.     int i = 0; //0假,1真,-1真
      9.     BOOL isOK = TURE;  //TURE等价于1
      10.     BOOL OKis = FALSE; //FALSE等价于0
      11.     if(OKis){
      12.         printf("i为true就输出改语句");
      13.     }
      14.     getchar();
      15. }
      复制代码

  • 自动类型的转换:

    • 什么是自动类型转换?在C语言程序中进行赋值或运算时,精度小的类型自动转换为精度大的数据类型
    • 细节:

      • 多个数据类型进行数据转换时,系统首先自动将所有数据转换为精度最大的数据类型(int和double进行运算,就转成double)
      • 精度大的值赋值给比它小的值会造成精度丢失(如:double给float赋值)
      • 两类型的字节数不同,转换成字节数大的类型,若两个类型的字节数相同,且一种由符号,一种无符号,则转换成无符号类型   


  • 强制转换:

    • 什么是强制转换?把精度高的数据转换为精度小的数据类型 
    • 语法:数据类型 名称 = (数据类型) 变量或数据
    • 细节:

      • 高精度转低精度会照成数据流失
      • 强转只对只近的的数有效,如果是对多个数据可以用()括号括起来
      • 强转不是四舍五入,直接获取小数点前面的数

      1. //引入头文件
      2. #include <stdio.h>
      3. void main(){
      4.     double i = 10.99;
      5.     int M = 20;
      6.     int k = (int)i; //强转
      7.     int num1 = (int)3.5*10 + 6*1.5; //强制转换只对最近的有效 - 这就是对3.5发生强转
      8.     int num2 = (int)(3.5*10 + 6*1.5); // 这对求出来的结果发生强转
      9.     //k结果10,强转不是四舍五入,而是直接获取小数前面的部分
      10.     printf("k=%d i=%f",k,i);//i=10.99,i仍然是double
      11.     getchar();
      12. }
      复制代码
       
                                                    

 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

知者何南

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表