C语言数据类型

数据类型

浮点型:float,double
整型:short,long,int,char(char以字符编码保存,他们也是数字)

char

字符在计算机的存储器中以字符编码的形式保存,字符编码是一个数字,因此在计算机看来A(ASCII码)和数字65完全一样

需要注意的点

1.字符串会被当做数组来读取,这个数组是由一个个的字符组成
2.字符串会存在结束字符'\0',也就是null
3.字符的索引值是从0开始的
4.单引号一般表示单个字符,双引号一般表示字符串

数组中如何定义字符串?

char test[][80] = array('test');
第一个[]中不写入是因为编译器知道列表项的个数,而第二个[80]是因为每个字符串的长度都不一样,为了存储最大的长度的字符串,所以分配了80(这个是按照需要定的)个字符

int

保存一个整数,通常使用int,不同计算机中int的大小不同,至少应该有16位

short

保存一个一百几千的数字,可以节省空间,一般是int的一半大小

long

大小是int的两倍,可以保存几十亿以内的数字,大部分计算机的long和int一样大,因为在这些计算机中int本身就很大

float

保存浮点数的基本数据类型

double

保存精确的浮点数。double比float多占一倍空间,可以保存更大,更精确的数字

超过数据类型范围的数据它会如何存储?

#include <stdio.h>

int main()
{
    int num = 100000;
    short t = num;

    printf("最终数据是:%d", t);
    return 0;
}

最终输出结果为:-31072

为什么最后存储的是负数?

数字以二进制保存,二进制的100000看起来是这样的:0001 1000 0110 1010 0000;当计算机想保存这个值到shrot的时候,发现只能保存两个字节,所以只保存了数字右半边:1000  0110 1010 0000;最高位是1的二级制有符号数会被当成负数处理,他等价于下面的十进制数:-31072

如下代码运行结果是什么?为什么?

#include <stdio.h>

int main()
{
    int x = 7;
    int y = 2;
    float z = x/y;
    printf("最后的结果是:%f\n", z);

    float a = (float) x/y;
    printf("最后的结果是:%f\n", a);
}

运行结果为:最后的结果是:3.000000;最后的结果是:3.500000
第一个输出位置z的值;由于x和y都是整型所以最后得到一个舍入的整数
第二个输出位置a的值;由于对x进行了类型转换;编译器就会自动将结果替换成浮点数的表示方式

数据类型的临界值

#include <stdio.h>
#include <limits.h>
#include <float.h>

int main()
{
    printf("int最大值是:%i\n", INT_MAX);
    printf("int最小值是:%i\n", INT_MIN);
    printf("int占用的字节大小:%lu bytes\n", sizeof(int));

    printf("float最大值是:%f\n", FLT_MAX);
    printf("float最小值是:%.50f\n", FLT_MIN);
    printf("float占用的字节大小:%lu bytes\n", sizeof(float));

    printf("char最大值是:%d\n", CHAR_MAX);
    printf("char最小值是:%d\n", CHAR_MIN);
    printf("char占用的字节大小:%lu bytes\n", sizeof(char));

    printf("signed char最大值:%d\n",SCHAR_MAX);
    printf("signed char最小值:%d\n",SCHAR_MIN);
    printf("unsigned char最大值:%u\n",UCHAR_MAX);

    printf("double最大值是:%f\n", DBL_MAX);
    printf("double最小值是:%.5f\n", DBL_MIN);
    printf("double占用的字节大小:%lu bytes\n", sizeof(double));

    printf("short最大值是:%d\n", SHRT_MAX);
    printf("short最小值是:%d\n", SHRT_MIN);
    printf("short占用的字节大小:%lu bytes\n", sizeof(short));

    printf("long最大值是:%ld\n", LONG_MAX);
    printf("long最小值是:%ld\n", LONG_MIN);
    printf("long占用的字节大小:%lu bytes\n", sizeof(long));

    return 0;
}

32位,64位到底是什么含义?

它既可以表示CPU指令的长度,也可以表示CPU一次从存储器读取数据的大小,实际上,位数是计算机能够处理的数值长度
坚持原创技术分享,您的支持将鼓励我继续创作!