主页 分类 关于

C语 数据类型 运算符 表达式

  1. C语 数据类型
    1. 整型有 基本整型 短整型 长整型 无符号整型 无符号短整型 无符号长整型
    2. 实型(又称浮点型)有 单精度实型 双精度实型
  • 常量与变量
    1. 整型常量
    2. 实型常量
    3. 字符型常量
  • 变量
    1. 整体变量
      1. 整体变量的分类:
      2. 整体变量在内存中占用的内存字节数和值域:
      3. 整形变量的定义
  • 实型(浮点型)变量
  • 字符变量
  • 变量赋初值
  • 各类数值型数据间混合运算
    1. 保值转换
  • C语言的运算符和表达式
    1. 掌握方法:
  • 1.基本算数运算符
  • 2.表达式和算术表达式
    1. 表达式求值规则:
  • 3.强制类型转换
    1. 格式:
  • 4.自增(++) 自减(–)
  • 5.关系运算符和关系表达式
  • 6.逻辑运算符和逻辑表达式
  • 7.赋值运算符和赋值表达式
    1. 1.赋值运算:
    2. 2.复合赋值运算:
    3. 3.赋值运算:
  • 8.条件运算符和条件表达式
    1. 一般格式:
    2. 运算规则:
    3. 运算符的优先级别与结合性:
  • 9.逗号运算符和逗号表达式
    1. 一般格式:
    2. 求解过程: 从左至右, 依次计算各表达式的值, 最后 "表达式n" 的值即为整个逗号表达式的值
    3. 注意: 并不是任何时候出现逗号运算符都是逗号运算符, 大多情况逗号仅用于分隔符
  • 10.位逻辑运算
    1. 按位逻辑运算:
    2. 说明: 参与运算时, 操作数都必须首先转换成二进制数, 然后再执行相应的按位运算 按位取反运算符的优先级别与其它单目运算符相同, 运算自右向左进行, 双目&运算符的优先级高于 | 运算符, | 运算符高于 ^ 运算符 位双目运算符的优先级别低于关系运算符, 高于逻辑运算符, 运算自左向右进行 11.位逻辑运算和位运算赋值运算符位移运算符: 操作符 名称 运算规则 说明 实际操作 << 左移 a << b, a左移b位 使操作各位左移, 低位补0, 高位移出舍去 操作数乘以2ⁿ (n位左移的位数) >> 右移 a >> b, a右移b位 使操作各位右移, 移出低位舍去 操作数除以2ⁿ (n位右移的位数) 说明: 高位: 对无符号和有符号中的正数 补0: 有符号中的负数, 取决于所使用的系统, 补0的称为”逻辑右移” 补1: 称为 “算数右移” 位移 <<, >>同级, 它们的优先级别较高, 仅次于算术双目运算符, 算数方向从左向右 左移运算符: 可以把一个数的各个二进制位全部左移若干位 右移运算符: 移动到右端低位被舍弃, 对无符号数, 高位补0 12.位运算符赋值运算符 所有位运算赋值运算符符优先级别向同, 与赋值优先级别相同, 运算方向自右向左运算 位运算赋值运算符: 操作符 名称 运算规则 说明 &= 位与赋值 a &= b等价于 a = a & b 操作数均为整数 ∣= 位或赋值 a ∣= b等价于 a = a ∣ b 操作数均为整数 ^= 按位异与赋值 a ^= b等价于 a = a ^ b 操作数均为整数 <<= 位左移赋值 a <<= b等价于 a = a << b 操作数均为整数 >>= 位右移赋值 a >>= b等价于 a = a >> b 操作数均为整数 运算符的优先级与结合性运算符的优先级与结合性: 优先级 运算符 含义 运输类型 结合性 1 (最高) ()[]->. 园括号, 函数参数列表数组元素下标指向元素成员结构体成员 自左至右 2 !~++–(类型)*&sizeof 逻辑非按位取反自增 1自减 1求负强制类型转换指针运算符求地址运算符长度运算符 单目运算 自右至左 3 */% 乘法除法求余运算符 双目运算 自左至右 4 +- 加法运算符除法运算符 双目运算 自左至右 5 <<>>% 左移运算符右移运算符 位移运算 自左至右 6 <<=>>= 小于小于等于大于大于等于 关系运算 自左至右 7 ==!= 等于不等于运算符 关系运算 自左至右 8 & 按位与 位运算 自左至右 9 ^ 按位异或 位运算 自左至右 10 ∣ 按位或 位运算 自左至右 11 && 按位与 逻辑运算 自左至右 12 ∣∣ 按位或 逻辑运算 自左至右 13 ? : 条件运算 三目运算 自右至左 14 =+=-=*=/=%=>>=<<=&=^=!= 赋值运算赋值 双目运算 自右至左 15 , 逗号运算 (顺序求值) 顺序运算 自左至右
  • 11.位逻辑运算和位运算赋值运算符
    1. 位移运算符:
    2. 说明:
  • 12.位运算符赋值运算符
    1. 位运算赋值运算符:
  • 运算符的优先级与结合性
    1. 运算符的优先级与结合性:
  • C语学习笔记

    C语 数据类型

    1. 基本数据类型: 整型 实型(又称浮点型) 字符型 三种

    2. 构造类型: 数组类型 结构体类型 检举类型 联合类型

    3. 指针类型: 指针是一种特殊的, 同时又是具有重要作用的数据类型, 其值用来表示某个变量在内存中的地址

    4. 空类型: 空类型 void用来声明函数的返回值类型为空(既不需要函数的返回值)

    graph LR A[" 数据类型 "]-->B[" 基本类型 "] B[" 基本类型 "]-->U[" 整型 "] B[" 基本类型 "]-->D[" 字符型 "] B[" 基本类型 "]-->E[" 实型(浮点型) "] A[" 数据类型 "]-->F[" 构造类型 "] F[" 构造类型 "]-->G[" 数组类型 "] F[" 构造类型 "]-->H[" 结构体类型 "] F[" 构造类型 "]-->I[" 共有类型 "] F[" 构造类型 "]-->J[" 检举类型 "] A[" 数据类型 "]-->K[" 指针类型 "] A[" 数据类型 "]-->L[" 空类型 "]














    整型有 基本整型 短整型 长整型 无符号整型 无符号短整型 无符号长整型

    实型(又称浮点型)有 单精度实型 双精度实型


    类型关键字 长度/字节 取值范围 说明
    int 2 -32 768~32 767 有符号的基本整型
    unsigned 2 0~65 535 无符号的基本整型
    short 2 -32 768~32768 有符号短整型
    unsigned short 2 0~65 535 无符号短整型
    long 4 -2 147 383 648~2 147 383 648 有符号长整型
    unsigned long 4 0~4 294 967 295 无符号长整型
    float 4 -3.4×10³⁸~3.4×10³⁸ 单精度实型
    double 8 -1.7×10³⁰⁸~1.7×10³⁰⁸ 双精度实型
    char 1 0~255 字符型

    常量与变量

    整型常量

    • 十进制整数: 由数字19开头, 其余各位由09组成

    • 八进制整数: 由数字0开头, 其余各位由0~7组成, 在书写时要加前缀 0 (零)

    • 十六进制整数: 由数字 0x 或者 0X 开头, 其余各位由09与字母af (0X 开头为A~F)组成, 在书写时要加前缀 0x 或者 0X

    实型常量

    • 十进制整数: 由数字和小数点组成 (注意必须加小数点)

    • 指数型势: 用带指数记数法来表示 123E2 或 123e2 都代表 123x10²

    字符型常量

    • 字符常量: 一对单引号括起来的单个字符 包括字符和字符之间的空格

    • 字符串常量: 一对双引号括起来的字符序列 包括字符(字符串)和字符(字符串)之间的空格

    • 字符串中字符的格式代表字符串的长度 长度为0的字符串(即一个字符都没有的字符串)称作: 空串

    C语言规定: 在储存字符串常量时, 由系统在字符串末尾自动添加一个 \0 作为字符串的结束标志


    s d q \0

    变量

    • 概念: 在程序运行过程中其值可以改变的量称为变量 变量要有变量名, 在内存中占有一定的存储单元, 储存单元存放的是该变量的值 所以每个变量要有 变量名 和 变量值 两要素

    • 变量名: 每个变量都必须有一个变量名, 变量命名遵守标识符命名规则, 变量名应取见名知意

    • 变量值: 在程序运行过程中, 变量值储存在内存中, 不同类型的变量占用的内存单元(字节)数不同 在程序中, 通过变量名来引用变量的值

    • 总体概况: 变量名实际上是一个符合的地址, 在对程序编译连接时由系统给每一个变量名分配一个内存地址 在程序中从变量中取值, 实际上是通过变量名找到相应的内存地址, 从其储存单元中读取数据

    整体变量

    整体变量的分类:
    • 整型变量分四类:

      • 基本整型(int)

      • 短整型(short[int])

      • 长整型(long[int])

      • 无符号整型

        • 无符号整型(unsigned[int]) 只能用来储存无符号整数

        • 无符号短整型(unsigned short) 只能用来储存无符号整数

        • 无符号长整型(unsigned long ) 只能用来储存无符号整数

    整体变量在内存中占用的内存字节数和值域:
    • 16位操作系统 int占2个字节

    • 32位操作系统 int占4个字节

    • long型 ≥ int型 ≥ short型

    整形变量的定义
    • 先定义, 后使用

    实型(浮点型)变量

    • 单精度型: 类型关键字为float, 一般占4个字节(32位), 携带7个有效数字

    • 双精度型: 类型关键字为double, 一般占8个字节(32位), 提供15个有效数字

    字符变量

    • 字符型: 类型关键字为char, 一般占1个字节内存单元

    变量赋初值

    变量类型 变量名 = 值;

    各类数值型数据间混合运算

    graph TB A[" 低 "]-->B[" 高 "] C[" float "]-->D[" double "] E[" long "]-->D[" double "] F[" unsigned "]-->E[" long "] G[" int "]-->F[" unsigned "] H[" char "]-->G[" int "] I[" short "]-->G[" int "]





    保值转换
    • 若运算符两端操作类型不一致, 在运算前应先将类型等级较低的数据类型转换成等级较高的, 这种不同级别的转换叫保值转换

    C语言的运算符和表达式

    掌握方法:
    • 运算符号

    • 运算规则, 即所进行的操作

    • 运算的优先级别

    • 运算顺序

    • 运算对象

    • 运算结果

    1.基本算数运算符

    • (加法) +

    • (减法/取负) —

    • (乘法) *

    • (除法) /

      • 除法运算商为整数
    • (求余) %

      • 要求: 运算符两侧的操作数均为整数

    2.表达式和算术表达式

    • 表达式的概念: 用运算符和括号将运算对象(常量, 变量和函数等)连起来的, 符合C语言语法规则都式子, 称为 表达式
    • 简单表达式的概念: 将单个常量, 变量或函数构成的表达式, 称为 简单表达式
    • 复杂表达式的概念: 除简单表达式的其他表达式称为 复杂表达式
    表达式求值规则:
    • 按运算符优先级高低顺序执行

    • 算数运算符的结合方向: 从左至右

    3.强制类型转换

    格式:
    (<要转换的数据类型名>) (<被转换的表达式>);

    4.自增(++) 自减(–)

    • 前置运算 运算符放在变量之前

      • ++变量 –变量
    • 后置运算 运算符放在变量之后

      • 变量++ 变量

    5.关系运算符和关系表达式

    • 优先级由高到低: 关系运算符( < <= > >= ) 大于 赋值运算符( == != )

    6.逻辑运算符和逻辑表达式

    • &&: 逻辑与(相当于 “并且”)

      • 当且仅当两个运算符的值都为时才为, 否则为
    • ||: 逻辑或(相当于 “或者”)

      • 当且仅当两个运算符的值都为时才为, 否则为
    • !: 逻辑非(相当于 “否定”)

      • 取反

        • 当运算符的值为
        • 当运算符的值为

    7.赋值运算符和赋值表达式

    1.赋值运算:
    <变量> = <赋值表达式>;
    2.复合赋值运算:
    <变量> <双目运算符> = <表达式>;
    // 它等价于
    <变量> = <变量>双目运算符(表达式);
    3.赋值运算:
    <变量> = [<复合赋值运算符>] = <表达式>;

    8.条件运算符和条件表达式

    一般格式:
    <表达式1> ? <表达式2> : <表达式3>;
    运算规则:
    • 如果 “表达式1” 的值为非0(即逻辑真), 则运算符结果等于 “表达式2” 的值, 否则运算结果等于 “表达式3” 的值
    运算符的优先级别与结合性:
    • 条件运算符的优先级, 高于赋值运算符, 但低于关系运算符和算数运算符, 其结合性为 从右到左” (即右结合性)

    9.逗号运算符和逗号表达式

    一般格式:
    <表达式1>, <表达式2>, ..., <表达式n>;
    求解过程: 从左至右, 依次计算各表达式的值, 最后 "表达式n" 的值即为整个逗号表达式的值
    注意: 并不是任何时候出现逗号运算符都是逗号运算符, 大多情况逗号仅用于分隔符

    10.位逻辑运算

    按位逻辑运算:

    操作符 名称 运算规则 主要用途
    & 按位与 对应位为1时才为1, 否则为0 将应该数的某(些)位置0, 其余位保留不变
    按位或 对应位为0时才为0, 否则为1 将应该数的某(些)位置1, 其余位保留不变
    ^ 按位异或 对应位相同为0, 不同时为1 使一个数的某(些)位置1, 其余位保留不变
    ~ 按位取反 各位翻转, 即1变0, 0变1 间接地构造一个数, 以增强程序的可移植性

    说明:

    • 参与运算时, 操作数都必须首先转换成二进制数, 然后再执行相应的按位运算

    • 按位取反运算符的优先级别与其它单目运算符相同, 运算自右向左进行, 双目&运算符的优先级高于 | 运算符, | 运算符高于 ^ 运算符

    • 位双目运算符的优先级别低于关系运算符, 高于逻辑运算符, 运算自左向右进行

    11.位逻辑运算和位运算赋值运算符

    位移运算符:

    操作符 名称 运算规则 说明 实际操作
    << 左移 a << b, a左移b位 使操作各位左移, 低位补0, 高位移出舍去 操作数乘以2ⁿ (n位左移的位数)
    >> 右移 a >> b, a右移b位 使操作各位右移, 移出低位舍去 操作数除以2ⁿ (n位右移的位数)

    说明:

    • 高位: 对无符号和有符号中的正数

    • 补0: 有符号中的负数, 取决于所使用的系统, 补0的称为”逻辑右移”

    • 补1: 称为 “算数右移”

    • 位移 <<, >>同级, 它们的优先级别较高, 仅次于算术双目运算符, 算数方向从左向右

    左移运算符: 可以把一个数的各个二进制位全部左移若干位

    右移运算符: 移动到右端低位被舍弃, 对无符号数, 高位补0

    12.位运算符赋值运算符

    • 所有位运算赋值运算符符优先级别向同, 与赋值优先级别相同, 运算方向自右向左运算

    位运算赋值运算符:

    操作符 名称 运算规则 说明
    &= 位与赋值 a &= b等价于 a = a & b 操作数均为整数
    ∣= 位或赋值 a ∣= b等价于 a = a ∣ b 操作数均为整数
    ^= 按位异与赋值 a ^= b等价于 a = a ^ b 操作数均为整数
    <<= 位左移赋值 a <<= b等价于 a = a << b 操作数均为整数
    >>= 位右移赋值 a >>= b等价于 a = a >> b 操作数均为整数

    运算符的优先级与结合性

    运算符的优先级与结合性:

    优先级 运算符 含义 运输类型 结合性
    1 (最高) ()
    []
    ->
    .
    园括号, 函数参数列表
    数组元素下标
    指向元素成员
    结构体成员
    自左至右
    2 !
    ~
    ++

    (类型)
    *
    &
    sizeof
    逻辑非
    按位取反
    自增 1
    自减 1
    求负
    强制类型转换
    指针运算符
    求地址运算符
    长度运算符
    单目运算 自右至左
    3 *
    /
    %
    乘法
    除法
    求余运算符
    双目运算 自左至右
    4 +
    -
    加法运算符
    除法运算符
    双目运算 自左至右
    5 <<
    >>
    %
    左移运算符
    右移运算符
    位移运算 自左至右
    6 <
    <=
    >
    >=
    小于
    小于等于
    大于
    大于等于
    关系运算 自左至右
    7 ==
    !=
    等于
    不等于运算符
    关系运算 自左至右
    8 & 按位与 位运算 自左至右
    9 ^ 按位异或 位运算 自左至右
    10 按位或 位运算 自左至右
    11 && 按位与 逻辑运算 自左至右
    12 ∣∣ 按位或 逻辑运算 自左至右
    13 ? : 条件运算 三目运算 自右至左
    14 =
    +=
    -=
    *=
    /=
    %=
    >>=
    <<=
    &=
    ^=
    !=
    赋值
    运算赋值
    双目运算 自右至左
    15 , 逗号运算 (顺序求值) 顺序运算 自左至右









    作者: 我叫史迪奇
    本文来自于: https://sdq3.link/C-type-operator-operator.html博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议