• 02_数据类型及其运算


    2.1 C的数据类型

    2.1.1 C语言关键字

     

    2.1.2 数据类型

    数据类型的作用:编译器预算对象(变量)分配的内存空间大小。

     

    1整型:int

    一、 整型变量的定义和输出

    打印格式

    含义

    %d

    输出一个有符号的10进制int类型

    %o(字母o)

    输出8进制的int类型

    %x

    输出16进制的int类型,字母以小写输出

    %X

    输出16进制的int类型,字母以大写输出

    %u

    输出一个10进制的无符号数

    1. #include
    2. int main()
    3. {
    4. int a = 123; //定义变量a,以10进制方式赋值为123
    5. int b = 0567; //定义变量b,以8进制方式赋值为0567
    6. int c = 0xabc; //定义变量c,以16进制方式赋值为0xabc
    7. printf("a = %d\n", a);
    8. printf("8进制:b = %o\n", b);
    9. printf("10进制:b = %d\n", b);
    10. printf("16进制:c = %x\n", c);
    11. printf("16进制:c = %X\n", c);
    12. printf("10进制:c = %d\n", c);
    13. unsigned int d = 0xffffffff; //定义无符号int变量d,以16进制方式赋值
    14. printf("有符号方式打印:d = %d\n", d);
    15. printf("无符号方式打印:d = %u\n", d);
    16. return 0;
    17. }

    二、 整型变量的输入

    1. #include
    2. int main()
    3. {
    4. int a;
    5. printf("请输入a的值:");
    6. //不要加“\n”
    7. scanf("%d", &a);
    8. printf("a = %d\n", a); //打印a的值
    9. return 0;
    10. }

    三、 short、int、long、long long

    数据类型

    占用空间

    short(短整型)

    2字节

    int(整型)

    4字节

    long(长整形)

    Windows为4字节,Linux为4字节(32位),8字节(64位)

    long long(长长整形)

    8字节

    注意:

    1. 需要注意的是,整型数据在内存中占的字节数与所选择的操作系统有关。虽然 C 语言标准中没有明确规定整型数据的长度,但 long 类型整数的长度不能短于 int 类型, short 类型整数的长度不能长于 int 类型。
    2. 当一个小的数据类型赋值给一个大的数据类型,不会出错,因为编译器会自动转化。但当一个大的类型赋值给一个小的数据类型,那么就可能丢失高位。

    2) 字符型:char

    一、 字符变量的定义和输出

    字符型变量用于存储一个单一字符,在 C 语言中用 char 表示,其中每个字符变量都会占用 1 个字节。在给字符型变量赋值时,需要用一对英文半角格式的单引号(' ')把字符括起来。

    字符变量实际上并不是把该字符本身放到变量的内存单元中去,而是将该字符对应的 ASCII 编码放到变量的存储单元中。char的本质就是一个1字节大小的整型

    1. #include
    2. int main()
    3. {
    4. char ch = 'a';
    5. printf("sizeof(ch) = %u\n", sizeof(ch));
    6. printf("ch[%%c] = %c\n", ch); //打印字符
    7. printf("ch[%%d] = %d\n", ch); //打印‘a’ ASCII的值
    8. char A = 'A';
    9. char a = 'a';
    10. printf("a = %d\n", a); //97
    11. printf("A = %d\n", A); //65
    12. printf("A = %c\n", 'a' - 32); //小写a转大写A
    13. printf("a = %c\n", 'A' + 32); //大写A转小写a
    14. ch = ' ';
    15. printf("空字符:%d\n", ch); //空字符ASCII的值为32
    16. printf("A = %c\n", 'a' - ' '); //小写a转大写A
    17. printf("a = %c\n", 'A' + ' '); //大写A转小写a
    18. return 0;
    19. }

    二、 字符变量的输入

    1. #include
    2. int main()
    3. {
    4. char ch;
    5. printf("请输入ch的值:");
    6. //不要加“\n”
    7. scanf("%c", &ch);
    8. printf("ch = %c\n", ch); //打印ch的字符
    9. return 0;
    10. }

    三、 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 码大致由以下两部分组成:

    1. ASCII 非打印控制字符: ASCII 表上的数字 0-31 分配给了控制字符,用于控制像打印机等一些外围设备。
    2. ASCII 打印字符:数字 32-126 分配给了能在键盘上找到的字符,当查看或打印文档时就会出现。数字 127 代表 Del 命令。

    3) 实型(浮点型):float、double

    实型变量也可以称为浮点型变量,浮点型变量是用来存储小数数值的。在C语言中, 浮点型变量分为两种: 单精度浮点数(float)、 双精度浮点数(double), 但是double型变量所表示的浮点数比 float 型变量更精确。

    数据类型

    占用空间

    有效数字范围

    float

    4字节

    31位有效数字

    double

    8字节

    6364位有效数字

    由于浮点型变量是由有限的存储单元组成的,因此只能提供有限的有效数字。在有效位以外的数字将被舍去,这样可能会产生一些误差。

    不以f结尾的常量是double类型,以f结尾的常量(如3.14f)是float类型。

    1. #include
    2. int main()
    3. {
    4. //传统方式赋值
    5. float a = 3.14f; //或3.14F
    6. double b = 3.14;
    7. printf("a = %f\n", a);
    8. printf("b = %lf\n", b);
    9. //科学法赋值
    10. a = 3.2e3f; //3.2*1000 = 3200,e可以写E
    11. printf("a1 = %f\n", a);
    12. a = 100e-3f; //100*0.001 = 0.1
    13. printf("a2 = %f\n", a);
    14. a = 3.1415926f;
    15. printf("a3 = %f\n", a); //结果为3.141593
    16. return 0;
    17. }

    2.1.3 常量

    常量:

    1. 在程序运行过程中,其值不能被改变的量
    2. 常量一般出现在表达式或赋值语句中

    整型常量

    100,200,-100,0

    实型常量

    3.14 , 0.125,-3.123

    字符型常量

    ‘a’,‘b’,‘1’,‘\n’

    字符串常量

    “a”,“ab”,“12356”

    2.1.4 变量

    变量:

    1. 在程序运行过程中,其值可以改变
    2. 变量在使用前必须先定义,定义变量前必须有相应的数据类型

    2.2 C运算符的种类、运算优先级和结合性

    2.2.1 常用运算符分类

    运算符类型

    作用

    算术运算符

    用于处理四则运算

    赋值运算符

    用于将表达式的值赋给变量

    比较运算符

    用于表达式的比较,并返回一个真值或假值

    逻辑运算符

    用于根据表达式的值返回真值或假值

    位运算符

    用于处理数据的位运算

    sizeof运算符

    用于求字节数长度

    2.2.2 算术运算符

    运算符

    术语

    示例

    结果

    +

    正号

    +3

    3

    -

    负号

    -3

    -3

    +

    10 + 5

    15

    -

    10 - 5

    5

    *

    10 * 5

    50

    /

    10 / 5

    2

    %

    取模(取余)

    10 % 3

    1

    ++

    前自增

    a=2; b=++a;

    a=3; b=3;

    ++

    后自增

    a=2; b=a++;

    a=3; b=2;

    --

    前自减

    a=2; b=--a;

    a=1; b=1;

    --

    后自减

    a=2; b=a--;

    a=1; b=2;

    2.2.3 赋值运算符

    运算符

    术语

    示例

    结果

    =

    赋值

    a=2; b=3;

    a=2; b=3;

    +=

    加等于

    a=0; a+=2;

    a=2;

    -=

    减等于

    a=5; a-=3;

    a=2;

    *=

    乘等于

    a=2; a*=2;

    a=4;

    /=

    除等于

    a=4; a/=2;

    a=2;

    %=

    模等于

    a=3; a%2;

    a=1;

    2.2.4 比较运算符

    C 语言的比较运算中, “用数字1”来表示, “用数字0”来表示。 

    运算符

    术语

    示例

    结果

    ==

    相等于

    4 == 3

    0

    !=

    不等于

    4 != 3

    1

    <

    小于

    4 < 3

    0

    >

    大于

    4 > 3

    1

    <=

    小于等于

    4 <= 3

    0

    >=

    大于等于

    4 >= 1

    1

    2.2.5 逻辑运算符

    运算符

    术语

    示例

    结果

    !

    !a

    如果a为假,则!a为真;

    如果a为真,则!a为假。

    &&

    a && b

    如果a和b都为真,则结果为真,否则为假。

    ||

    a || b

    如果a和b有一个为真,则结果为真,二者都为假时,结果为假。

    2.2.6 运算符优先级

    优先级

    运算符

    名称或含义

    使用形式

    结合方向

    说明

    1

    []

    数组下标

    数组名[常量表达式]

    左到右

    --

    ()

    圆括号

    (表达式)/函数名(形参表)

    --

    .

    成员选择(对象)

    对象.成员名

    --

    ->

    成员选择(指针)

    对象指针->成员名

    --

    2

    -

    负号运算符

    -表达式

    右到左

    单目运算符

    ~

    按位取反运算符

    ~表达式

    ++

    自增运算符

    ++变量名/变量名++

    --

    自减运算符

    --变量名/变量名--

    *

    取值运算符

    *指针变量

    &

    取地址运算符

    &变量名

    !

    逻辑非运算符

    !表达式

    (类型)

    强制类型转换

    (数据类型)表达式

    --

    sizeof

    长度运算符

    sizeof(表达式)

    --

    3

    /

    表达式/表达式

    左到右

    双目运算符

    *

    表达式*表达式

    %

    余数(取模)

    整型表达式%整型表达式

    4

    +

    表达式+表达式

    左到右

    双目运算符

    -

    表达式-表达式

    5

    <<

    左移

    变量<<表达式

    左到右

    双目运算符

    >>

    右移

    变量>>表达式

    6

    >

    大于

    表达式>表达式

    左到右

    双目运算符

    >=

    大于等于

    表达式>=表达式

    <

    小于

    表达式<表达式

    <=

    小于等于

    表达式<=表达式

    7

    ==

    等于

    表达式==表达式

    左到右

    双目运算符

    !=

    不等于

    表达式!= 表达式

    8

    &

    按位与

    表达式&表达式

    左到右

    双目运算符

    9

    ^

    按位异或

    表达式^表达式

    左到右

    双目运算符

    10

    |

    按位或

    表达式|表达式

    左到右

    双目运算符

    11

    &&

    逻辑与

    表达式&&表达式

    左到右

    双目运算符

    12

    ||

    逻辑或

    表达式||表达式

    左到右

    双目运算符

    13

    ?:

    条件运算符

    表达式1?

    表达式2: 表达式3

    右到左

    三目运算符

    14

    =

    赋值运算符

    变量=表达式

    右到左

    --

    /=

    除后赋值

    变量/=表达式

    --

    *=

    乘后赋值

    变量*=表达式

    --

    %=

    取模后赋值

    变量%=表达式

    --

    +=

    加后赋值

    变量+=表达式

    --

    -=

    减后赋值

    变量-=表达式

    --

    <<=

    左移后赋值

    变量<<=表达式

    --

    >>=

    右移后赋值

    变量>>=表达式

    --

    &=

    按位与后赋值

    变量&=表达式

    --

    ^=

    按位异或后赋值

    变量^=表达式

    --

    |=

    按位或后赋值

    变量|=表达式

    --

    15

    逗号运算符

    表达式,表达式,…

    左到右

    --

    2.3 不同类型数据间的转换与运算

    数据有不同的类型,不同类型数据之间进行混合运算时必然涉及到类型的转换问题。

    转换的方法有两种

    1. 自动转换(隐式转换):遵循一定的规则,由编译系统自动完成。
    2. 强制类型转换:把表达式的运算结果强制转换成所需的数据类型。

    类型转换的原则:占用内存字节数少(值域小)的类型,向占用内存字节数多(值域大)的类型转换,以保证精度不降低。

     

    2.3.1 隐式转换

    1. #include
    2. int main()
    3. {
    4. int num = 5;
    5. printf("s1=%d\n", num / 2);
    6. printf("s2=%lf\n", num / 2.0);
    7. return 0;
    8. }

    2.3.2 强制转换

    强制类型转换指的是使用强制类型转换运算符,将一个变量或表达式转化成所需的类型,其基本语法格式如下所示:

    (类型说明符) (表达式)

    1. #include
    2. int main()
    3. {
    4. float x = 0;
    5. int i = 0;
    6. x = 3.6f;
    7. i = x; //x为实型, i为整型,直接赋值会有警告
    8. i = (int)x; //使用强制类型转换
    9. printf("x=%f, i=%d\n", x, i);
    10. return 0;
    11. }

    2.4 C表达式类型

    注意:(赋值表达式,算术表达式,关系表达式,逻辑表达式,条件表达式,逗号表达式)和求值规则。二级各科考试的公共基础知识大纲及样题见高等教育出版社出版的《全国计算机等级考试二级教程——公共基础知识(2013年版)》的附录部分。

  • 相关阅读:
    设计模式【八】:组合模式
    代码随想录算法训练营第四十三天 | ● 1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零
    opencv for unity package在unity中打开相机不需要dll
    用 AWTK 和 AWPLC 快速开发嵌入式应用程序 (3)- 定时器
    vben-admin 学习记录
    DBMS_RESOURCE_MANAGER
    Android音视频开发:MediaRecorder录制音频
    03大数据技术之Hadoop(HDFS)
    vue快速入门(四十二)ref与$refs的使用
    ​打造企业自己代码规范IDEA插件(中)
  • 原文地址:https://blog.csdn.net/MengSao1001/article/details/126371873