zoukankan      html  css  js  c++  java
  • 第三章-数据类型

    1. 数据类型分类

    基本类型

    整数类型 short int, int, long int , long long int
    浮点数类型 float-单精度 double-双精度 long double
    字符类型 char
    布尔类型 _Bool
    枚举类型 enum

     

    通过sizeof 可以看到,每种类型在内存中预留的位置是多大。

    #include   <stdio.h>
    
    int main()
    
    {
        printf("short int is %d
    ",sizeof(short int));
        printf("int length is %d
    ",sizeof(int));
        printf("long int is %d
    ",sizeof(long int));
        printf("long long int is %d
    ",sizeof(long long int));
        printf("float is %d
    ",sizeof(float));
        printf("double is %d
    ",sizeof(double));
        printf("_Bool is %d
    ",sizeof(_Bool));
        printf("long duoble int is %d
    ",sizeof(long double));
        return 0;
    }
    
    short int is 2
    int length is 4
    long int is 8
    long long int is 8
    float is 4
    double is 8
    _Bool is 1
    long duoble int is 16

    单位是字节

    signed:带符号,可以表示负数

    unsigned:不带符号,只能表示0和正数

    指针类型

    构造类型

    空类型

    2. 数值类型的数值范围

    比特位,CPU能读懂的最小单位,bit

    内存中最小的寻址单位,Byte

    1Byte = 8bit

    每个bit,只能存放0和1

    1个Byte能够表示的最大的二进制数,为1111 1111。10进制表示为255。2**8 - 1

    int 能存放4个字节的数字,4个字节就是4*8=32个bit,能存放的最大是32个1,10进制表示为 2**32-1 = 42949967295。也就数说int最大能存的数是42949967295,但是实际上不是这样的。

    int 要分为带符号和不带符号。

    如果是带符号,既可以表示正数,也可以表示负数。32个字节,第一个字节用来表示符号位,0表示正数,1表示负数。

    那么能用的只剩下,31个位可以使用,

    符号位为1的情况,31为能表示的数是31个1,2**31-1=2147483647。

    符号位为0的情况,比较麻烦,计算机如何存放负数,通过补码的形式存放负数,负数的补码就不是二进制数了

    计算机存放的都是补码。

    补码是怎么来的呢?原码---反码---补码

    7在计算机中的原码为 0 000 0111,最高位0表示正数,符号位,其余为数值位

    7在计算机中的反码为 0 000 0111,正数的原码和反码一样。

    7在计算机中的补码为 0 000 0111,正数的补码和反码一样。

    -7在计算机中的原码为 1 000 0111,最高位1表示负数。

    -7在计算机中的反码为 1 111 1000,最高位1表示负数,在原码的基础上,符号位不变,数值位为全部取反,0变成1,1变成0

    -7在计算机中的补码为 1 111 1001, 最高位1表示负数,在反码的基础上,符号位不变,数值位的最后一位+1。

    为什么要存放补码呢?是因为存放补码可以用+表示加和减,一举两得。

    -7+7怎么表示呢?全是补码的相加

    1 111 1001

    0 000 0111

    1 111 1112 ,舍弃最高位(符号位)进位后变成 000 0000,结果为0。

    -7-7 怎么表示呢?也是补码的相加。-7 + (-7)

    1 111 1001

    1 111 1001

    1 2222002 进位后变成  1 111 0010,这是补码的形式,如果变成反码为 1 111 0001 在变成 原码为 1 0001110 表示 -14。

    计算机如果最高位字符位为1,表示为负数,需要将数值位-1,然后字符位取反,变成原码,就知道是负多少了。 

    存放补码的意义是为了让减法变成加法来运算,比较快。不需要借位。算完的结果仍然是补码。

    8个比特位,最小的负数是多少呢?负数的补码,0越多,数值越大,表示的负数就越小。

    补码:1 000 0001---反码为---  1000 0000 ---原码为----1 111 1111 表示 -127

    补码:1 000 0000---反码为----1 1111 1111 ---原码为 ---- 1 000 0000 表示 -128, 因为 1000 0000的二进制没有对应的任何真数,所以认为规定了为-128。

    8个比特位,最大的整数是多少呢?正数色补码,1越多,数值越大,表示的正数越大。

    补码 0 111 1111 --- 反码为 --- 0 111 1111 ---原码为---- 0 111 1111 表示 127。

    补码 0 000 0000 --- 反码为 ---- 0 000 0000 ---原码为--- 0 000 0000 表示 0。

    因此8个比特位的字符,反码能够表示带符号的范围为 [-128,127] 

    https://blog.csdn.net/chenchao2017/article/details/79733278

     

    3. 字符和字符串

    #include <stdio.h>
    
    int main()
    {
    
        char a = 'C';
        printf("%c = %d
    ",a,a);
        return 0;
    
    }
    
    root@ubuntu:/home/yanyanzhang/c_study# gcc test4.c -o test4 && ./test4
    C = 67

    67就是C在ASCII码表中对应的值

    字符类型就是一个特殊的整型,值都是对应到ASCII码表中的十进制值。

    重点: char类型默认不是signed char,c语言并没有规定默认值,默认值是由编译系统自行决定,int等默认就是singed int。

    举例说明:

    #include <stdio.h>
    
    
    int main()
    
    {
        char height;
        height = 170;
        printf("my height is %d 
    ",height);    
        return 0;
    
    
    }
    
    root@ubuntu:/home/yanyanzhang/c_study# gcc test5.c -o test5 && ./test5
    my height is -86 

    身高竟然是-86,很奇怪,因为ubuntu系统的gcc指定了char默认是signed char,取值范围是-128,127,身高170超过了这个值,所以返回了怪怪的值-86。

    将 char height;改为 unsigned char height;让取值范围变成0,255之间

    root@ubuntu:/home/yanyanzhang/c_study# gcc test5.c -o test5 && ./test5
    my height is 170 

    字符串,声明 char 变量名[字符数量] ,申请了一个连续长度的空间。

    #include<stdio.h>
    
    int main()
    
    {    
        char name[5] = {'z','h','z','z','z'};
        printf("name:%s
    ",name);
        return 0;
    
    }
    
    root@ubuntu:/home/yanyanzhang/c_study# gcc test6.c -o test6 && ./test6
    name:zhzzz  没有出现乱码,c语言定义字符串的时候,要指定一个结束位,,否则不知道从哪里结束

    # TODO

  • 相关阅读:
    并发量,tps,qps
    MYSQL安装和配置
    python 生成随机数的几种方法
    python 判断是字母的多种方法
    python实战,
    linux工作常用命令
    apache http server安装
    .py与.pyc文件区别
    上传本地文件到linux
    ms
  • 原文地址:https://www.cnblogs.com/meloncodezhang/p/14459126.html
Copyright © 2011-2022 走看看