【C语言1】基本数据类型、表达式及运算符

【C语言1】基本数据类型、表达式及运算符

文章目录

  • 1.基本数据类型、表达式及运算符
    • 1.1 C语言中链接数据类型的种类
    • 1.2 基本数据类型
      • 1.2.1 整型
      • 1.2.2 字符型
      • 1.2.3 浮点型
      • 1.2.4 缺省类型(空类型void)
      • 1.2.5 泊尔类型(bool)
    • 1.3 printf终端打印工具
    • 1.4 常量与变量
    • 1.5 表达式
    • 1.6 类型转换
    • 1.7 运算符
      • 1.7.1 算数运算符
      • 1.7.2 赋值运算符
      • 1.7.3 三目运算符
      • 1.7.4 逗号运算符和sizeof( )运算符
      • 1.7.5 关系运算符
      • 1.7.6 逻辑运算符
      • 1.7.7 位运算符
      • 运算符优先级

1.基本数据类型、表达式及运算符

本章思维导图:

此处为C语言汇总版:【C 语言md编辑器版】从0基础开始到熟练掌握【完整篇,共9部分】

1.1 C语言中链接数据类型的种类

  • 基本数据类型

    • 整型
    • 字符型
    • 浮点型
    • 缺省型(空类型void)
    • 泊尔类型(bool)
  • 构造数据类型

  • 指针类型

1.2 基本数据类型

在学习数据类型之前我们可以先学习两个关键字和转义字符、格式控制符、格式修饰符,有助于学习不同数据类型的大小。

​ 运用sizeof( )关键字可以获取数据类型在内存中所占的字节数。

​ 运用printf(" ")可以在终端打印引号内的内容。

转义字符:是通过特定的符号序列表示特殊字符或操作的方式,常用于处理不可打印字符或具有特殊意义的字符。

格式控制符:也被称为格式化字符串格式化标识符。它们是用于指定数据格式的特殊字符序列。

1.2.1 整型

整型数据如int、short、long在内存中以补码形式存储。

  • 有符号整型:可以表示正数,也可以表示负数

    • 最高位为符号位(0:正数 1:负数)

    • 其他位位数据位

    • 正数的补码=原码 负数的补码=反码-1

      例如:-2026

      原码:1000 0111 1110 1010

      反码:1111 1000 0001 0101

      补码:1111 1000 0001 0110

  • 无符号整型:仅能表示正数

    • 最高位为符号位

整型数据的溢出:

例如:unsigned short 最大值+1?
最大值+1----》最小值
最小值-1-.–》最大值

short短整型(内存中2字节)

​ 无符号:0000 0000 0000 0000(最小值0) ——1111 1111 1111 1111(最大值65535)

​ 有符号:1000 0000 0000 0000(最小值-32768) ——0111 1111 1111 1111(最大值32767)

int整型(内存中为4字节)

long长整型(内存中为8字节)

总结:

初学C语言时,int类型应该能满足大多数程序的整数类型需求。尽管如此,还应了解一下整型的其他形式。C语言提供3个附属关键字修饰基本整数类型:short、long和unsigned。应记住以下几点:

  • short int类型(或者简写为short)占用的存储空间可能比int类型少,常用于较小数值的场合以节省空间。与int类似,short是有符号类型。
  • long int或long占用的存储空间可能比int多,适用于较大数值的场合。与int类似,long是有符号类型。
  • long long int或long long(C99标准加入)占用的储存空间可能比long多,适用于更大数值的场合。该类型至少占64位。与int类似,long long是有符号类型。
  • unsigned int或unsigned只用于非负值的场合。这种类型与有符号类型表示的范围不同。例如,16位unsigned int允许的取值范围是0-65535,而不是-32768~32767。用于表示正负号的位现在用于表示另一个二进制位,所以无符号整型可以表示更大的数。
  • 在C90 标准中,添加了 unsigned long int 或 unsigned long 和 unsigned int 或 unsignedshort 类型. C99 标准又添了 unsigned long long int 或 unsigned long long.
  • 在任何有符号类型前面添加关键字signed,可强调使用有符号类型的意图。例如,short、shortint、signed short、signed short int 都表示同一种类型.

1.2.2 字符型

在所有的编程语言中,字符型数据都是以ASCII码(美国信息交换标准代码)的形式保存每一个字符都对应着一个编码,这个编码其实是一个整数来的,编码范围:0 ~ 127。因此字符型数据也可以当作整形数据进行运算。ASCII码表如下:

1.2.3 浮点型

用来表示小数的数据类型。

  • 单精度浮点型:float
    • 精度范围:6-8位
    • 内存中占的字节数:4
    • IEEE标准规定,double类型在内存中符号位(1bit)、指数位(8bits)、尾数位(23bits)方式存储。

8.125

符号位:0

1000.001——>1.000001 2^3

指数位:127+3=130——>1000 0010

尾数位:00000100000000000000000

内存位:0100 0001 0000 0010 0000 0000 0000 0000

0x41020000

  • 双精度浮点型:double
    • 精度范围:12-16位
    • 内存中占的字节数:8
    • EEE标准规定,double类型在内存中符号位(1bit)、指数位(11bits)、尾数位(52bits)方式存储。

8.125

符号位:0

1000.001——>1.000001 2^3

指数位:1023+3=1026——>100 0000 0010

尾数位:00000100000000000000000…(1后有46个0)

内存位:0100 0000 0010 0000 0100 0000 0000 0000…

0x40204000…

注意:浮点数据在储存时可能出现精度损失。

1.2.4 缺省类型(空类型void)

函数的形参和返回值:不返回参数、不返回数据。

用在函数和指针部分,目前暂做了解

1.2.5 泊尔类型(bool)

结果:true/false

#include<stdio.h>#include<stdbool.h>intmain(){boola=true;boolb=false;printf("sizeof(a):%d true:%d false:%d\n",a,a,b);return0;}//输出结果:sizeof(a):1true:1false:0

1.3 printf终端打印工具

用法:可以向终端打印出“”里面的内容,当遇到%开头的格式控制符时,将格式控制符换成逗号后面的值。

格式控制符号意义
%d以十进制整型数据(int)方式打印
%ld以十进制整形数据(long)方式打印
%c以字符方式打印
%f以float类型控制打印
%lf以double类型控制打印
%u以无符号整形数据方式打印
%lu以无符号长整型方式打印

1.4 常量与变量

C 语言操作的对象。

  1. 常量

    在程序运行过程中值不会发生改变的量叫做常量。

    • 整型常量

      不带任何后缀的整型常量默认为signed int类型。

      u:无符号 L:长整型

      ​ 十进制整型常量:123 123L 123ul 123u

      ​ 八进制整型常量:0123 0123L 0123uL 0123u

      ​ 十六进制整型常量:0x123

    • 字符型常量

      ASCII 表

      ‘字母/数字/特殊符号’——> 都是字符

      特殊字符:

特殊字符符号输出
\00
\a响铃
\b退格
\t横向制表符
\v纵向制表符
\n换行符
\r回车符
\\\\
\\(加三位数字,不足三位前面补 0)八进制的数
\x(两位数字)十六进制数
%%%
/""
  • 浮点型常量

    小数默认是double类型。后缀加上f就为float类型。

    例如:double型:3.14 3.14E2 3.14e-2

    float型:3.14f 3.14E2f 3.14e-2f

  • 字符串常量

    “ ” 用双引号引起的内容即为字符串。

    注:所有字符串在最后都会有‘\0’这个不可见字符作为字符串结束标志。

  • 标识符常量(宏定义)

语法:define 标识符 数值

例:#define PI 3.14

注:标识符一般都采用纯大写,且只做代码的替换,不做其他运算。

  • 变量

    在程序运行过程中值可以发生改变的量叫做变量。

    • 变量在 C 语言中的定义:

      数据类型 名称

    • 变量名的命名规则:

      • 由数字、字母、下划线组成,其中数字不能作为开头;
      • 需要避免与 C 语言关键字、库函数、系统函数重复;
      • 名称一般具有代表意义;
    • 命名规则种类:

      驼峰法;例:MaxValue

      Linux 内核命名(下划线);例:max_value

    • 变量的初始化

      语法:数据类型 变量名 = 值

    • 变量的复制

1.5 表达式

定义:使用关系运算符连接常量或变量构成的句子。

注:任何表达式都会有一个确切类型的结果。

1.6 类型转换

  • 显示强制转换

    语法:(目标类型) 转换对象

    强制转换带精度数据时,高精度会损失精度。

    强转不会改变原数据。

  • 隐式类型转换

    转换规则:

此类型转换由操作系统完成。

1.7 运算符

1.7.1 算数运算符

  • 双目运算符:+ - * / %
  • 单目运算符:自增运算符(++)自减运算符(--
    ​ 注:i++先用后加++i先加后用
    求余运算符%必须是整型数据或与整型兼容的数据类型。

1.7.2 赋值运算符

=+=-=/=*=

赋值运算符优先级(14)极低,仅高于逗号,

例:a += 10 +5——>a = (10 + 5)

a += b——>a = a + b其余的均类似

左值:放在运算符左边的数,只能是变量。

右值:放在运算符右边的数,可以是变量、常量、表达式。

两边需保持数据类型一致,否则在某些情况下,会出现数据改变。

例如:

  • int a = 3.14; //此时a只能储存正数部分
  • int a = -100; unsigned int b = 0;b = a;//此时b会直接储存a所在内存的数据,数据的符号位变为数据位,数据改变。
  • 小空间数据类型放入大空间数据类型时,从低位开始储存,高位补符号位(数据不改变)
  • 大空间数据类型放入小空间数据,在小空间数据类型范围内数据不变,反之高位截断

1.7.3 三目运算符

三个操作数。
语法:表达式1 ?表达式2 :表达式3
若表达式1成立,则三目运算符的结果为表达式2,反之结果为表达式3。

1.7.4 逗号运算符和sizeof( )运算符

  • 逗号运算符
    逗号在式中为运算符,优先级最低。在其余位置一般为分隔符。
    例:
    num = 2 + 3, 4 * 5, 6 - 4; //结果为5 num = (2 + 3, 4 * 5, 6 - 4); //结果为2 printf("%d\n", num ); \\此时逗号为分隔符
  • sizeof()
    用来获取数据类型/常量/变量/表达式的结果在计算机内存中占的字节数。
    返回结果:unsigned long

1.7.5 关系运算符

<>>=<===!=
详细知识点请见章节3.3 分支结构

1.7.6 逻辑运算符

&&||
详细知识点请见章节3.3 分支结构

1.7.7 位运算符

运算符优先级

优先级运算符集合运算目数结合方向
1()[]->.后缀运算符左→右
2!~++---(类型)*&sizeof单目运算符右→左
3*/%双目运算符左→右
4+-双目运算符左→右
5<<>>双目运算符左→右
6<<=>>=双目运算符左→右
7==!=双目运算符左→右
8&双目运算符左→右
9^双目运算符左→右
10|双目运算符左→右
11&&双目运算符左→右
12||双目运算符左→右
13?:三目运算符右→左
14=+=-=*=/=%=<<=>>=&=^=|=双目赋值运算符右→左
15,逗号运算符左→右