数据类型

一、C语言数据类型
    基本类型:系统分配给基本类型的变量的内存空间大小固定
        整型
            (unsigned) short       2字节   
            (unsigned) int         4字节
            (unsigned) long        4字节
        实型(浮点型)
            单精度实型   float    4字节
            双精度实型   double   8字节
        字符型
            (unsigned)  char      1字节
            
    ☆构造类型:系统分配给构造类型的变量的内存大小,决定于该类型具体是怎样定义的
        数组类型
        结构体类型
        联合类型(共用体)
        枚举类型
        
    ☆指针类型
        *
        
    空类型(无值类型)  void
    
二、常量与变量
    常量:在程序运行期间,其值不能被改变的量,称为常量
        如   1  2   3   3.14
        3 = 4; //error,3是一个常量,其值不能被改变
        
    变量: 一个可以改变的量
        变量实质上是内存中一个具有特定属性的存储单元,它是用来存放数据的。这个存储单元中
        的数据,就是变量的值,而这个值在程序运行期间可以被改变(被赋值)。
        
    变量名: 变量的名字
        ★系统把内存以一个字节为单位划分成许多份进行编号,这个编号就是地址(无符号32位整数),
        即每增加一个字节地址加1。操作系统访问内存哪个单元时,必须要知道它的地址。
        在定义变量时,会在内存分配空间(大小根据变量的数据类型),这时变量名就与该空间的首地址
        关联起来,即系统由变量名可以知道内存空间的地址。
        
    变量的定义
        数据类型  变量名;
    eg:  int a;
        "数据类型":所有的C语言合法的类型
        "变量名":给存储数据的那个对象(变量)取个名字
            ★在C语言中,不管你是给什么对象取名字,都必须要符合C语言标识符的命名规则
                C语言标识符必须由字母、数字、下划线组成,且第一个字符必须为字母或下划线。
                建议:给对象取名,尽量做到"见其名知其义"。
                
    变量的访问(读/写)
    (1)从变量中取值(读),实际上是通过变量名找到相应的内存地址,从该地址对应的存储单元中
      读取数据。这时变量一般在赋值号(=)的右边,表示变量的值,我们称为 右值。
    (2)给变量赋值(写),实际上是通过变量名找到相应的内存地址,把数值写到该地址对应的存储单元
     中去,覆盖原来的值,这时变量一般在赋值号(=)的左边,表示变量的内存空间,我们称为 左值。
     
    给变量的第一次赋值,我们叫做初始化,变量没有初始化,其值是不确定的。
    
    常变量:  定义时用const修饰的变量,初始化后就不能再赋值,即为只读变量。
        const int a=3;
        a = 4;//error
        
三、整型数据
    整型常量:
        十进制数    1,2,3,99       %d(格式控制符)
        八进制数    以0开头的 0664    %o
        十六进制数  以0x开头的  0x12  %x
        
    整型变量
        ★整型数据在内存中是以二进制的补码形式存放的,且最高位为符号位,1表示负数,
         0表示正数,其它位为数值位。
           "补码":
                如果存储的数是正数,则就是原码(直接转化为二进制)
                如果存储的数是负数,则绝对值的原码取反加1
                
        (1)当编译器以整型输出时(%d),是以补码还原的方式来解读。
        (2)当CPU把数据进行运算时,直接以内存中存储的方式进行运算,即补码的形式
        (3)当编译器以无符号整型输出时(%u),就没有符号位的概念了,全部都是数值位,
          直接转化为十进制输出。
          
    C语言各整型之间的赋值的问题
        长->短:  int=>short  short=>char  int=>char
            只保留低字节
        短->长:  
            unsigned:低字节直接拷贝,高位补0
            signed:低字节直接拷贝,高位补符号位
            
    有符号和无符号的本质区别:
        数据拷贝到CPU内部寄存器的方式不同:signed高位补符号位,unsigned高位补0
        (1)unsigned char a=255;
           char b=255;
           printf("%d %u\n",a,a);//255 255
           printf("%d %u\n",b,b);//-1  4294967295
        (2)unsigned short a=-1;
           int b = a;
           printf("%d\n",b);//
            
四、浮点型数据
    单精度 (float 32bits)   %f
    双精度 (double 64bits)  %lf
    
五、字符型数据   %c     man  ascii
    char ,unsigned char   (8bits)
    在内存中字符型数据的存放,实际上存放的是ASCII码(给每个字符一个整数值)
    字符常量  ''
    'a'  '1'  '+'  '?'
    '\n'  换行
    '\t'  横向跳格(Tab横向制表)
    '\r'  回车,回到本行行首
    '\\'  反斜杠
    '%%'  %
    '\ddd'  ddd表示1到3位八进制数,打印效果为该数字对应的ASCII码的字符
    '\xhh'  hh表示1到2位十六进制数,打印效果为该数字对应的ASCII码的字符
    
    字符串常量  "","abcdef"  %s
        每个字符串在内存中保存都会在末尾有一个终止符 '\0'(它的ASCII码就是0)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值