C语言 - 数据的类型、大小、取值范围

数据

1 - 数据分为静态数据和动态数据

① 静态数据:一些永久性的的数据。一般存储在硬盘中,只要硬盘没坏数据都是存在的,一般以文件的形式存储在硬盘上

② 动态数据:程序运行过程中动态产生的的临时数据。一般存储在内存中,软件或者电脑关闭则这些临时数据会被清除

注:静态数据占硬盘空间,动态数据占内存空间。计算机中以字节为单位存储数据

2 - 单位换算

      1B = 8bit                            1k = 1024B = 2^10B             1M = 1024k = 2^20B  

      1G = 1024M = 2^30B         1T = 1024G = 2^40B

数据类型

1 - 数据类型表示了数据所能表示的范围和数据所占用的内存空间

注:枚举类型是基本数据类型,而不是构造类型。严格的说它是复合类型,是 C语言的内置类型(许多教材上将其归为构造类型)

2 - 字符型

① 存储形式:字符型 char c = 'A' 字符在内存中是以二进制的格式存储的,比如 char num = '6' 其对应的 ASCII 码值是 54

② 单引号只能括住单字节的字符,ASCII 中的所有字符都是单字节,它的有符号范围是 -128 ~ 127

char c = ''; // 错误,一个汉字占据 3 个字节的存储空间
char d = "A";  //  错误,双引号括起的是字符串
char c = 65;   //  正确,这是 ASCII 码 

3 - 浮点型

1 - 范围:float 和 double 的范围是由指数的位数来决定的。float 的指数位有 8 位,而 double 的指数位有 11 位

① float

② double

float 的指数范围为 -127 到 +128,而 double 的指数范围为 -1023 到 +1024。指数位是按补码的形式来划分的

③ 精度:float 和 double 的精度是由尾数的位数来决定的,尾数即有效小数位。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的 1,由于它是不变的,所以不能对精度造成影响

  float:   2^23 = 838 8608,一共 7 位,这意味着最多能有 7 位有效数字,但绝对能保证的为 6 位,也即 float 的精度为 6~7 位有效数字

    double:2^52 = 4503 5996 2737 0496,一共 16 位,就是说 double 的精度为 15~16 位,能绝对保证到 15 位

4 - 代码示例

① 将小写字母转换为大写

char upper(char c){
    
    if(c>='a'&& c<='z')
        // ASCII码 中 0 - 25 是大写字母,26 - 51 是小写字母
        return c-('x'-'X');
    else
        return c;
}

int main(int argc, const char * argv[]) {
    
    char a = upper('b');
    printf("%c\n",a);// 输出 B
}

② 基本数据类型

 1     // int:整型
 2     int a = 4;
 3     printf("a 的初始值是:%d \n",a);
 4     a = 10;// 对 a 重新赋值
 5     printf("a 的新值是:%d \n",a);
 6     
 7     int b = 0 ;// 当变量未被初始化则默认为 0
 8     printf("未被初始化 b 的默认值是:%d \n",b);
 9     
10     // short 短整型
11     short x = 2;
12     x = 3;
13     printf("短整型 x 的值是:%d",x);
14     
15     // long 长整型类型
16     long y = 4;
17     y = 5;
18     printf("\n长整型 y 的值是:%ld",y);
19     
20     
21     // float 单精度浮点型
22     float c = 9.8;
23     printf("/nc 的初始值是:%f \t",c);// 9.800000
24     c = 7;
25     printf("c 的新值是%0.2f \n",c);// 7.00(保留两位小数)
26     
27     // double 双精度浮点类型
28     double d = 1.234;
29     printf("d 的初始值是:%f \t",d);// 1.234000
30     d = 3.444;
31     printf("d 的初始值是:%f \n",d);// 3.444000
32     
33     // 字符型:数字、字母和特殊字符,都可以是字符。 一个字符可以有两种表达形式:字符型(原型)和整型(ASCII 值)
34     char lg = '2' ;
35     printf("lg 的字符值是:%c\nlg字符值对应的整型是:%d\n",lg,lg);// 2     50

③ 互换两个数的值

1     // 方式一
2     int a = 10;
3     int b = 4;
4     printf("a=%d,b=%d\n",a,b);
5     int temp;// 声明一个中间变量来完成两个变量之间的交换
6     temp = a;
7     a = b;
8     b = temp;
9     printf("a=%d,b=%d\n",a,b);
1     // 方式二
2     int a = 10;
3     int b = 4;
4     printf("a=%d,b=%d\n",a,b);
5     
6     a = b-a;
7     b = b-a;
8     a = a+b;
9     printf("a=%d,b=%d\n",a,b);

数据类型的大小、取值范围

1 - 因 CPU 差异各系统中的数据类型所占的字节数不同、二进制位数也不同。想要知道自己系统的数据类型的字节数、位数,可以用 sizeof() 关键字

printf("字节 %lu;\n位数 %lu\n", sizeof(int), sizeof(int) * 8);

在 win64 下的数据类型以及取值范围

2 - 取值范围则可以用极限值符号(极限值符号定义在 limits.h 头文件中),以 char 型为例

1 #include <stdio.h>
2 #include<limits.h>
3 int main(int argc, const char * argv[]) {
4     
5     printf("MIN %d;\nMAX %d\n", CHAR_MIN, CHAR_MAX);
6 
7     return 0;
8 }

 

posted on 2017-08-02 11:33  低头捡石頭  阅读(311)  评论(0编辑  收藏  举报

导航