美文网首页
2.C语言数据类型

2.C语言数据类型

作者: Zac程序员的日常生活 | 来源:发表于2019-02-14 15:29 被阅读0次

    数据类型

    作用:编译器预算对象(变量)分配的内存大小

    Snip20190214_4.png

    变量

    1. 在程序运行过程中,其值可以改变
    2. 变量在使用前必须先定义,定义变量前必须有相应的数据类型
    3. 标识符不能是关键字
    4. 标识符只能由字母、数字、下划线组成
    5. 第一个字符必须为字母或下划线
    6. 字母区分大小写
    7. 在编译时为其分配相应的内存空间
    8. 可以通过其名字和地址访问相应内存
    9. extern声明变量的时候内存中不会创建存储空间,只表示声明,并没有定义
    10. 当变量没有进行声明,直接定义变量时,如:int b;它既是声明也是定义,此时内存中会开辟存储空间

    进制

    概念:逢X进一位就是X进制

    二进制

    计算机中采用的进制,逢二进一,数据在计算机中主要是以补码的形式存储的

    单位

    术语 含义
    bit(比特) 一个二进制代表一位,一个位只能表示0或1两种状态。数据传输是习惯以“位”(bit)为单位。
    Byte(字节) 一个字节为8个二进制,称为8位,计算机中存储的最小单位是字节。数据存储是习惯以“字节”(Byte)为单位。
    WORD(双字节) 2个字节,16位
    DWORD 两个WORD,4个字节,32位
    1b 1bit,1位
    1B 1Byte,1字节,8位
    1k,1K 1024
    1M(1兆) 1024k, 1024*1024
    1G 1024M
    1T 1024G
    1Kb(千位) 1024bit,1024位
    1KB(千字节) 1024Byte,1024字节
    1Mb(兆位) 1024Kb = 1024 * 1024bit
    1MB(兆字节) 1024KB = 1024 * 1024Byte

    八进制

    缩写为OCT或O,逢八进一,八进制的数和二进制数可以按位对应(八进制一位对应二进制三位,取三合一),表示八进制时以数字0开头

    Snip20190214_7.png

    十六进制

    由0-9,A-F组成,字母不区分大小写。与10进制的对应关系是:0-9对应0-9,A-F对应10-15,十六进制的数和二进制数可以按位对应(十六进制一位对应二进制四位,取四合一),表示十六进制时以0x开头

    Snip20190214_10.png

    进制间转换

    十进制整数转二进制:十进制数除以2,分别取余数和商数,商数为0的时候,将余数倒着数就是转化后的结果

    eg:

    Snip20190214_5.png

    十进制小数转二进制:小数部分和2相乘,取整数,不足1取0,每次相乘都是小数部分,顺序看取整后的数就是转化后的结果

    注意点

    1. 乘的时候只乘小数部分
    2. 如十进制为3为小数,则二进制也为3为即可

    eg:

    Snip20190214_13.png

    十进制转八进制:十进制数除以8,分别取余数和商数,商数为0的时候,将余数倒着数就是转化后的结果

    eg:

    Snip20190214_8.png

    十进制转十六进制:十进制数除以16,分别取余数和商数,商数为0的时候,将余数倒着数就是转化后的结果

    eg:

    Snip20190214_12.png

    内存数值存储方式

    在计算机系统中,数值一律用补码来存储

    原因如下:

    1. 统一了零的编码
    2. 将符号位和其它位统一处理
    3. 将减法运算转变为加法运算

    原码

    概念:原始的二进制码

    1. 最高位做为符号位,0表示正,为1表示负
    2. 其它数值部分就是数值本身绝对值的二进制数

    eg:

    十进制数 原码
    +14 0000 1110
    -14 1000 1110
    +0 0000 0000
    -0 1000 0000

    反码

    特点

    1. 对于正数,反码与原码相同
    2. 对于负数,符号位不变(即最高位不变),其它部分取反(1变0,0变1)

    eg:

    十进制数 反码
    +14 0000 1110
    -14 1111 0001
    +0 0000 0000
    -0 1111 1111

    补码

    计算机系统中,数值一律用补码来存储

    特点

    1. 对于正数,原码、反码、补码相同
    2. 对于负数,其补码为它的反码加1
    3. 补码符号位不动,其他位求反,最后整个数加1,得到原码
    十进制数 补码
    +14 0000 1110
    -14 1111 0010
    +0 0000 0000
    -0 0000 0000

    整型:int

    输出

    打印格式 含义
    %d 输出一个有符号的10进制int类型
    %o(字母o) 输出8进制的int类型
    %x 输出16进制的int类型,字母以小写输出
    %X 输出16进制的int类型,字母以大写写输出
    %u 输出一个10进制的无符号数
    void test1(){
    
       int a = 123;    //定义变量a,以10进制方式赋值为123
       int b = 0567;    //定义变量b,以8进制方式赋值为0567
       int c = 0xabc;    //定义变量c,以16进制方式赋值为0xabc
    
       printf("int整型所占的字节数:%d\n", sizeof(int)); //4个字节,一个字节占8位,即共能放32位   
       printf("a = %d\n", a);
       printf("8进制:b = %o\n", b);
       printf("10进制:b = %d\n", b);
       printf("16进制:c = %x\n", c);
       printf("16进制:c = %X\n", c);
       printf("10进制:c = %d\n", c);
        
       unsigned int d = 0xffffffff; //定义无符号int变量d,以16进制方式赋值
       printf("有符号方式打印:d = %d\n", d);
       printf("无符号方式打印:d = %u\n", d);
    
    }
    

    其余类型

    数据类型 占用空间
    short(短整型) 2字节
    int(整型) 4字节
    long(长整形) Windows为4字节,Linux为4字节(32位),8字节(64位)
    long long(长长整形) 8字节
    void test2(){
    
        //环境:Mac64位电脑
        printf("int整型所占的字节数:%d\n", sizeof(int)); //4个字节,一个字节占8位,即共能放32位
        printf("short所占的字节数:%d\n", sizeof(short)); //2个字节,一个字节占8位,即共能放16位
        printf("long所占的字节数:%d\n", sizeof(long)); //8个字节,一个字节占8位,即共能放64位
        printf("long long所占的字节数:%d\n", sizeof(long long)); //8个字节,一个字节占8位,即共能放64位
        
    }
    
    整型常量 所需类型
    10 代表int类型
    10l, 10L 代表long类型
    10ll, 10LL 代表long long类型
    10u, 10U 代表unsigned int类型
    10ul, 10UL 代表unsigned long类型
    10ull, 10ULL 代表unsigned long long类型
    打印格式 含义
    %hd 输出short类型
    %d 输出int类型
    %l 输出long类型
    %ll 输出long long类型
    %hu 输出unsigned short类型
    %u 输出unsigned int类型
    %lu 输出unsigned long类型
    %llu 输出unsigned long long类型

    有符号数

    最高位为符号位,0代表正数,1代表负数

    无符号数

    最高位不是符号位,而就是数的一部分,无符号数不可能是负数

    数据类型 占用空间 取值范围
    short 2字节 -32768 到 32767 (-215 ~ 215-1)
    int 4字节 -2147483648 到 2147483647 (-231 ~ 231-1)
    long 4字节 -2147483648 到 2147483647 (-231 ~ 231-1)
    unsigned short 2字节 0 到 65535 (0 ~ 216-1)
    unsigned int 4字节 0 到 4294967295 (0 ~ 232-1)
    unsigned long 4字节 0 到 4294967295 (0 ~ 232-1)

    字符型:char

    概念

    ​ 用一对英文半角格式的单引号(' ')把字符括起来,本质就是一个1字节大小的整型

    void test3(){
        char ch = 'a';
        printf("sizeof(ch) = %u\n", sizeof(ch));// 1
    
        printf("ch = %c\n", ch); //打印字符 ‘a’ ASCII的值
        printf("ch = %d\n", ch); //打印97
    
        char A = 'A';
        char a = 'a';
        printf("a = %d\n", a);        //97
        printf("A = %d\n", A);    //65
    
        printf("A = %c\n", 'a' - 32); //小写a转大写A
        printf("a = %c\n", 'A' + 32); //大写A转小写a
    
        ch = ' ';
        printf("空字符:%d\n", ch); //空字符ASCII的值为32
        printf("A = %c\n", 'a' - ' '); //小写a转大写A
        printf("a = %c\n", 'A' + ' '); //大写A转小写a
    }
    

    ASCII对照表

    ASCII****值 控制字符 ASCII****值 字符 ASCII****值 字符 ASCII****值 字符
    0 NUT 32 (space) 64 @ 96
    1 SOH 33 ! 65 A 97 a
    2 STX 34 " 66 B 98 b
    3 ETX 35 # 67 C 99 c
    4 EOT 36 $ 68 D 100 d
    5 ENQ 37 % 69 E 101 e
    6 ACK 38 & 70 F 102 f
    7 BEL 39 , 71 G 103 g
    8 BS 40 ( 72 H 104 h
    9 HT 41 ) 73 I 105 i
    10 LF 42 * 74 J 106 j
    11 VT 43 + 75 K 107 k
    12 FF 44 , 76 L 108 l
    13 CR 45 - 77 M 109 m
    14 SO 46 . 78 N 110 n
    15 SI 47 / 79 O 111 o
    16 DLE 48 0 80 P 112 p
    17 DCI 49 1 81 Q 113 q
    18 DC2 50 2 82 R 114 r
    19 DC3 51 3 83 S 115 s
    20 DC4 52 4 84 T 116 t
    21 NAK 53 5 85 U 117 u
    22 SYN 54 6 86 V 118 v
    23 TB 55 7 87 W 119 w
    24 CAN 56 8 88 X 120 x
    25 EM 57 9 89 Y 121 y
    26 SUB 58 : 90 Z 122 z
    27 ESC 59 ; 91 [ 123 {
    28 FS 60 < 92 / 124 |
    29 GS 61 = 93 ] 125 }
    30 RS 62 > 94 ^ 126 `
    31 US 63 ? 95 _ 127 DEL

    转义字符

    转义字符 含义 ASCII****码值(十进制)
    \a 警报 007
    \b 退格(BS) ,将当前位置移到前一列 008
    \f 换页(FF),将当前位置移到下页开头 012
    \n 换行(LF) ,将当前位置移到下一行开头 010
    \r 回车(CR) ,将当前位置移到本行开头 013
    \t 水平制表(HT) (跳到下一个TAB位置) 009
    \v 垂直制表(VT) 011
    \ 代表一个反斜线字符"" 092
    ' 代表一个单引号(撇号)字符 039
    " 代表一个双引号字符 034
    ? 代表一个问号 063
    \0 数字0 000
    \ddd 8进制转义字符,d范围0~7 3位8进制
    \xhh 16进制转义字符,h范围09,af,A~F 3位16进制

    浮点型:float、double

    数据类型 占用空间 有效数字范围
    float 4字节 7位有效数字
    double 8字节 15~16位有效数字

    类型限定符

    限定符 含义
    extern 声明一个变量,extern声明的变量没有建立存储空间。 extern int a;
    const 定义一个常量,常量的值不能修改。 const int a = 10;
    volatile 防止编译器优化代码
    register 定义寄存器变量,提高效率。register是建议型的指令,而不是命令型的指令,如果CPU有空闲寄存器,那么register就生效,如果没有空闲寄存器,那么register无效。

    字符串格式化输出和输入

    打印格式 对应数据类型 含义
    %d int 接受整数值并将它表示为有符号的十进制整数
    %hd short int 短整数
    %hu unsigned short 无符号短整数
    %o unsigned int 无符号8进制整数
    %u unsigned int 无符号10进制整数
    %x,%X unsigned int 无符号16进制整数,x对应的是abcdef,X对应的是ABCDEF
    %f float 单精度浮点数
    %lf double 双精度浮点数
    %e,%E double 科学计数法表示的数,此处"e"的大小写代表在输出时用的"e"的大小写
    %c char 字符型。可以把输入的数字按照ASCII码相应转换为对应的字符
    %s char * 字符串。输出字符串中的字符直至字符串中的空字符(字符串以'\0‘结尾,这个'\0'即空字符)
    %p void * 以16进制形式输出指针
    %% % 输出一个百分号

    相关文章

      网友评论

          本文标题:2.C语言数据类型

          本文链接:https://www.haomeiwen.com/subject/dapeeqtx.html