C语言学习5(整形,浮点型,字符型,布尔类型,数据类型计算大小,数据类型转换)

一、C语言基本语法

1)整形

        (1)int     C语言语法内置关键字

        数据类型可以用来定义变量的,变量名就是空间的表示。

         整形变量的定义:

        申请合法内存空间,申请空间是为了存放数据。(程序是由代码写出来之后编译生成的,程序就是由多种数据组成的,所以程序需要数据,那么数据需要的是变量  )       

        用法: int 变量名字;    (变量名字叫做标识符,标识符有命名规则:由数字,字母,下划线组成,开头不能是数字).

         整形变量的赋值:

        用法: 变量名 = 数据值; (数据拷贝,大文件传输,其实内部原理就是:数据的赋值原理,内部代码就是通过一个=实现的)         

        整形变量的输出:

       调用一个C语言标准库提供的函数(库函数):printf 

        整形变量的初始化

        初始化:定义并且赋值一般情况下:先定义之后再赋值,如果是初始化只需要一条式子即可

        例如:

int data = 100;
int a = 1,b = 2;

       

        在函数里定义的变量,一般称为局部变量,如果局部变量没有初始化也没有赋值,那么的存放的值是随机值。           

        在函数外面定义的变量,称为全局变量,如果全部变量没有初始化也没有赋值,那么的存放的值是0。

        整形变量中的数据在内存中的存放方式和所占内存大小

        整形数据在机器中是以补码的形式存放的,补码是二进制方式的数据。

        整形数据是以补码的形式存放在运行内存里面的。

        一个整形变量:大小   

        系统:       

        16位:2个字节       

        32位:4个字节       

        64位:4个字节                     

        整型数据在内存中的存放形式是补码形式存放的,但是补码需要通过原码求出来。                二进制:1111    1x2的3 + 1x2的2  +1x2的1次 + 1x2的0   8+4+2+1         

        原码:正数的原码就是自己的数据值转成二进制。

        负数的原码:符号位不变(1),数据位是他的绝对值的二进制,int data_a = -3;       1  000000000....11       1  111111111....01

        补码:        正数的补码:它本身的原码       

                        负数的补码:它本身的原码取反(也就是他的反码),再+1

        反码:        符号位不变,数据位0变1,1变0       

如:
int data = 3;//默认是有符号的,也可以写成 signed int data_a;

    总共是32个位(int占4个字节,每个字节8比特),因为这个整型变量是有符号的,所有最高位(最左边的那个位是符号位),剩下的为31数据位,最低两位为11,剩下的都是0 
       
    最高位是符号位:表示正负之分(0:正 1:负),不存放数据,所以int有符号的取值范围是 -2的31次方 ~ 2的31次方-1        
   
3的
    源码 000000000....11
    反码 011111111....00

-3的
    源码 100000000....11
    反码 111111111....00

补码 
    正数的补码是自己的源码
    负数的补码是反码+1

    定义一个变量,unsigned int data_a,那么就改变了取值范围变为 0~2 的32次方-1;

    signal int a(就是int a,默认是有符号)称为有符号整型,可以存放正数和负数,      
    unsignal int a称为无符号整型,只能存放正数,所以没有符号位,而是32个数据位。  

 注意:科学计数法e或者E表示的是浮点数

                10E2,用科学计数法算出来的就是浮点数

补充:有符号和无符号的区别:

        无符号的就是无正负之分之能存放正数整数,所以它没有符号位,也就是他有32个数据位他的正数的取值范围是有符号的两倍。

        有符号的整数范围:-2的31~2的31次方-1无符号的整数范围:0~2的32次方无符号变量可以用%u输出但是默认是十进制输出!

(2)short 短整型

        定义 有符号短整型:

        signed short data; 默认 short data;即可  最完整的写法: auto signed short int data;

        定义 无符号短整型:

        unsigned short data;原理是一样的,无符号取值范围是有符号正数范围的两倍。其定义赋值和初始化和int一样关于定义一个有符号的短整型,

         默认的情况下,局部变量都是自动化变量   

        短整型的的输入输出格式   

        有符号十进制:%hd   

        无符号整形(所有的进制):%hu   

        有符号八进制和十六进制:    %ho    %hx

总结

基本类型存放形式: int char long short  原码:         负数: 符号位是1,数据位是他的绝对值的二进制         正数: 符号位是0,数据位就是他的二进制形式 补码  :         正数: 他的原码就是他的补码         负数: 反码+1 反码:           符号位不变,数据位0变1,1变0

        整型:

        输出%d   输入%d  

        64位和32位大小:4个字节  

        短整型:  

        输出%hd   输入%hd  

        大小:2个字节  

        长整型:   

        输出:%ld    输入:%ld   

        大小:       64位:8个字节     32位:4个字节

        进制数:    输入:%d %o %x    输出:%d %o %x

(3)long 整形

        定义赋值初始化 :long  int  data;  长整型定义变量的完整格式(局部变量):auto signed long int data;

        输出格式:

        有符号:    十进制  :%ld    八进制  :%lo    十六进制:%lx

        无符号长整型:    %lu   

        变量是表示一块内存空间,所以变量是用来存放常量数据.空间是由地址组成的(4个字节由4个地址组成),所有内存中的所有变量都有自己的地址. 变量是用来表示空间的。空间由地址组成。

        地址的输出格式是%p,这个%p只能用于输出。指针就是地址,地址就是指针

2)浮点型 

        单精度float   双精度double

        定义赋值:

        单精度float a;

        双精度double a;

        输入输出格式:   

        float : 输入输出格式为%f   

        double: 输入输出格式为%lf,但是输入一定要lf (scanf),输出可以用%f,flaot的取值范围比double小   

        long double: 输入输出为%Lf   

        各个类型输入输出格式统计

        E表示科学计数法:    这种数据默认是什么类型:浮点型,E的后面是整数       

        如 2E3:表示2X10的3次方(标准写法:2E+03)

3)字符型 

        char 字符数据=字母 + 符号 + 数字字符 +转义字符      'a'  ','  '1'  '\n'

        字符变量的定义:    char char_data;

        字符变量的赋值:    char_data = ',';     //字符常量

        字符变量的初始化:    char char_data = 's';

        取值范围:    -2的7次方 ~ 2的7次方-1  , 发现取值范围有是和数字有关        

        char a = 'S'; //s的数据怎么存放在内存中,因为内存只能存放0或者1对于字符,字符有对应的ascii表:设置字符数据的存放格式和表达方式。

        ascii表明,每一个字符都有自己的 字符表达+十进制表达+八进制表达+十六进制表达,所以字符类型和整形可以互相转换表示

如以下代码:

#include <stdio.h>

int main()

{      

    int  int_a  = 96;

    char char_b = 'a';


    printf("%c\n",int_a);  

    printf("%d\n",char_b); //96



    return 0;

}

字符和整形相互转换表达

转义字符   转义字符只占一个字节

4)布尔类型

bool    是C语言内置语法

        布尔变量只有两种情况,用来判断真和假 (非0即真)

        真:true表示   1

        假:false表示  0

#include <stdio.h>
#include <stdbool.h>            //使用布尔变量需要包含的头文件

                         //变量名叫做标识符:有命名规则:数字 字母 下划线组成,开头不能是数字

int main()
{
    int num;                                 //这份代码就是实现判断num这个数是不是偶数    
    bool mask;                            //定义一个布尔变量    
    printf("请先输入一个数进行判断:");    
    scanf("%d",&num);    
    if(num % 2 == 0)    
    {        
        mask = true;                             //用true表示 num是偶数    
    }    
    else    
    {        
        mask = false;                         //用false表示 num不是偶数    
    }        


    if(mask == true)    
    {        
        printf("num是偶数!\n");    
    }    
    if(mask == false)    
    {        
         printf("num不是偶数!\n");    
    }    
    printf("布尔变量的大小:%d个字节\n",sizeof(mask));
}

PS:操作系统中内存最小的基本单位是字节。

5)数据类型计算大小

        计算数据类型或者变量的大小我们可以用杂项运算符来帮我们计算:sizeof

         一个bool变量是一个字节

        总所周知,一个bool变量是一个字节,但是bool里面只能放1或者放0,一个位的空间就够了,为什么要申请一个字节?   

        常见的操作系统对数据的控制,最小是以一个字节来控制的。

         1关于sizeof:    他是帮我们计算数据类型的字节长度,是有数据类型的

6)数据类型转换 

        很重要(写项目)

        自动转换(隐式转换 --- 编译器在编译代码的时候自动帮你转的),低精度 自动转高精度

        char ---》 short ----》 int ---》 long ---》 double   低精度 --》 高精度

      

 混合运算:    
    int a=1;
    float b = 2;
    a+b-a*b+a是float
 
    所以printf("%f\n",a+b-a*b+a);
    
    赋值运算: =右边的类型会自动转成左边的类型        
    
    float b = 2.45;    
    int a = b;                  //这里的类型转换是常量的类型转换并不是变量的类型转换                    
    printf("%d\n",a); 

      

        注意:    低精度转高精度:取值范围变大,好! 占用内存变大。   

        高精度转低精度:取值范围变小,数据可能会丢失,不好!  占用内存变小。    

        到底要不要类型转换,高变低还是低变高主要看产品.

PS:

        强制转换(手动 转换)

        第一种强制转换:    int a = 11;       

                                         printf("%ld\n",(long)a);   

        第二种强制转换 “提高可读性”

                                        int a = 1;

                                        float b = (float)a;

        第三种强制转换 混合运算中的强制转换   

                                        int a = 2;   

                                        long b = 1;   

                                        printf("%d\n",a+(int)b);

  • 14
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值