数据类型

    技术2025-03-30  18

    一、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)

    Processed: 0.009, SQL: 9