c语言学习分享:数据类型学习与分析 -凯发旗舰厅

c语言编程学习区

3个成员 2个话题 创建时间:2016-09-05

c语言学习分享:数据类型学习与分析

发表于2019-11-26 1485次查看

 

实现功能-------数据处理---------存储内存----->占用内存空间大小----->数据类型

衡量内存空间大小的单位---------->字节byte   bit(编程)

1. 数据类型的作用

1)数据类型决定对应的数据所占的内存空间大小

2)数据类型决定数据在内存中的排列方式(位排列方式---->存储格式)

3)数据类型决定内存空间存储的数据的范围

4)数据类型决定数据的使用方式    

2. 数据类型的分类:(了解)

      1)基本数据类型:  整型     字符型     实型,  固定,不可拆分,

      2)构造数据类型:由其他类型构造出来类型,可拆分为基本数据类型

                     数组类型  

                     结构体类型

            共用体类型

            枚举类型

3)指针类型

1)空类型:  void    用于函数的参数,函数的返回值

    void *   万能型指针

 

1. 纯数字组成,整数,用整型表示, 89   9000    467  -199   -399   145235   56  45  7788

2. 常用关键字:  int   个字节

3. 分类:

      1)短整型:   short (int)   所占空间大小2个字节   省略不写

      2)整型       int           所占空间大小4个字节,  

不同编译平台,所占空间大小不一样, win32平台下,空间大小一般都是4个字节

   3)长整型     long  (int)   个字节      int省略不写

      4)长长整型: long  long (int)  空间大小8个字节

1)有符号数据:  数据有正负之分,关键字:signed, 一般省略不写,默认为有符号数据

      存储格式: 符号位 数据位

        符号位:利用最高位表示符号位,最高位1,负数,最高位为0,正数

2)无符号数据:  数据没有正负之分,相当于只有正数,没有负数,关键字 unsigned

 存储格式:数据位

 

int  main()          

{

   //有符号数据,signed 省略不写

   int age;               //signed int  age ;

   long long b = 689;     //signed long long b = 689;

   int g = -1111;

   printf("%d\n",g);

   //无符号数据

   unsigned int c = 100;  

   unsigned short f = 90;  //unsigned short int f = 90

   return 0;

}

1.     存储数据的范围

int unsigned int 为例

1)有符号整型:

最大值:符号位为031数据位为1  

最小值:符号位为1,  31数据位为0 - 21474836478

2)无符号整型:

最大值:32个数据位为14294967295

最小值:32个数据位为0 0

练习:

       short                   [-32768,32767]

    unsigned short    [0,65535]

2.     数据的溢出规律

给变量赋值,超过数据类型对应的范,在内存中存储的数据是溢出后的数据

;    //2147483649  不在int类型数据范围内,则发生溢出

1)  数据如果从最大值方向溢出,则从最小值开始递增

2)  数据如果从最小值方向溢出,则从最大值开始递减

1. 表示,用单引号括起来的数据,‘a  & k‘@’\t‘\n’  ‘\101’(八进制表示字符)  

 ‘\xab’(十六进制字符)  

一个字符实际上在内存中是以整型的格式存储,用个特定的整数表示一个特定的字符,字符与整数之间存在一一对应的关系,由ascii码表(美国标准信息交换表)决定

3. 分类:

             有符号字符: (signed) char  1个字节,signed 省略不写,默认有符号数据

             无符号字符: unsigned char , 所占空间大小1个字节

1.     存储范围:

char          [-128,127]     //

unsigned char  [0,255]

2.     字符的分类

1)控制字符(转义字符)只体现功能,不显示字符本身,’\n’

2)打印字符:  可以显示在显示终端上,显示字符本身

‘\0’   -------------- 0    空字符

\n ------------ 10    换行

\t ---------   9     水平制表符,表示一个符在显示终端占8个字符的位置

   ‘\r’  ----------- 13     回车

标准换行‘\r’’\n’  

‘0’ ~  ‘9’         48 ~ 57

‘a’~  ‘z’         65 ~  90

‘a’ ~ ‘z’           97  ~ 122

‘ ’ ------ 32        空格字符

‘\hhh’          h[0,7],采用八进制的形式表示一个字符

                        \101--------->1*8^2 0 *8^1 1*8^0 =65

‘\xhh’          h[0,f] 采用十六进制的形式表示一个字符,  x 表示十六进制

                        \x41 ------->65

\’    单引号

\”    双引号

\\    反斜杠字符

 

 

int main()

{

   //字符数据 char

   char a = 'k';        //给字符变量赋字符值

   

   printf("%d\n",a);   //打印字符aascii码值

   printf("%c\n",a);   //以字符的格式打印a的值

   

   char b = 67;     //十进制  //给字符变量赋acii码值

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

   

   

   char ch = 3;        //给字符变量赋ascii码值为3的字符

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

   

   char bf = '\n';

   bf = '\0';

   printf("bf = %c\n",bf); //转义字符体现功能,不显示字符本身

   printf("bf = %d\n",bf);

   

   printf("hell world\n");

   printf("\tsjhk\n");      //\t 功能,占8个字符的位置

   

   

   char pk = '\101';      //八进制

   printf("%d\n",pk); //ascii码值

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

   pk = '\x42';           //十六进制

   printf("%d\n",pk); //ascii码值

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

}

 

练习:

1)对于一个字符是否能够参与运算?

a*4 ’b’       //可以

97*4 66

2)如何将一个数字字符ch转换为整型数据?

5-------->5

ch – 48;  

3)大小字母写字符ch(小写字符) 相互转换?

ch 32 == ch

ch – 32 == ch(大写字符)

4)如何判断一个字符ch,是否为大写的字母字符?

if(ch >= ‘a’ && ch <= ‘z’)   {//大写的字符}

 

5)数据的计算

char ch = 130;

printf(“%d\n”,ch);   //

 

char ph = ‘z’;

ph = ph *4;

printf(“%d\n”,ph)?

{

   //char [-128,127]

   char ch = 130;  //130 - 256

   printf("%d\n",ch);

   

   ch = 'z' * 4;  //122 * 4 = 488

                           //488 - 256 - 256

   printf("%d\n",ch);

}

 

1.也称为浮点型,由小数点组成的数据    90.23  1.23   4.56   90.0

2. 分类:单精度关键字 float    所占的内存空间大小4个字节

双精度  关键字double  所占的内存空间大小8个字节

3.实型数据不使用signed 或者unsigned 修饰是否为有符号数据

小数位指数位,跟整型和字符型的存储格式不一样

5.范围

float和double的范围是由指数的位数来决定的,float的指数位有8位,而double的指数位有11位,分布如下:  

float:   1bit(符号位) 8bits (指数位)  23bits(尾数位) //32bit

double:  1bit(符号位) 11bits(指数位)  52bits(尾数位) //64bit

于是:float的指数范围为   -127~ 128

double的指数范围为  -1023~ 1024

并且指数位是按补码的形式来划分的。其中负指数决定了浮点数所能表达的绝对值最小的非零数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。

float的范围为  -2^128 ~ 2^128, 也即 -3.40e 38 ~ 3.40e 38;// 3.4*10^38      double的范围为 -2^1024 ~ 2^1024,也即 -1.79e 308 ~ 1.79e 308。

6. 说明:数据比较的时候,不使用实型数据

1整型变量与零值比较应当将整型变量用“==”或“! =”直接与 0 比较。

假设整型变量的名字为 value,它与零值比较的标准 if 语句如下:

if (value == 0)

if (value != 0)

2)浮点变量与零值比较不可将浮点变量用“==”或“!=”与任何数字比较。千万要留意,无论是 float 还是 double 类型的变量,都有精度限制。所以一定要避免将浮点变量用==”或“!=”与数字比较,应该设法转化成“>=”或“<=”形式。

假设浮点变量的名字为 x,应当将

if (x ==0.0) // 隐含错误的比较

转化为

if((x>=-epsinon) && (x<=epsinon))

其中 epsinon 是允许的误差(即精度)

{

   int ph = 65;   //符号位 数据位

   

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

   printf("%d\n",ph);

   printf("%f\n",ph); //符号位 小数位 指数位

   

   float pg = 57.67;

   printf("%f\n",pg);

   printf("%d\n",pg);

   

   //1) 适用于实型数据的格式符%f %lf 不能用于整型数据和字符型数据

   //   适用于字符和整型数据的格式符不能用于实型数据

   

   //2) 实型数据有精度限制,给变量赋的值和在内存中存储的值有误差范围

   //   实型数据不能与任何数字直接进行比较

   //float a ;  if(a)    //数学:0-0.01 >= 0 <=  0 0.01  

}

发表回复
你还没有登录,请先