C/C++丨复习unit2基本数据类型和相关计算

unit2 基本数据类型 and 相关计算

注:本文参考中国铁道出版社《C语言程序设计(第三版)》书写
主要用于记录学习中的重点要点,欢迎指出错误
同时也欢迎交流学习~

2.1 基本数据类型

三种:整数 浮点数 and 字符
有穷性

2.1.1 整形数据

不带小数点 and 指数符号 的数据

长度修饰:short , long
符号类型修饰:signed , unsigned

其中signed为int的默认类型,可以省略
short int 可以省略为 short
long , unsigned 同理

负数的表示方式,补码,用二进制的最高位的表示正负

整常量的类型表示方式:
加 L or l 表长整型常量
加 U or u 表无符号整数
在整数之后加上 U and L(顺序不限), 表无符号长整型

2.1.2 浮点型数据

表带 小数点 or 指数符号 的数值数据

三类:
单精度型 float
双精度型 double
长双精度型 long double
(实际上也存在long long double)

一般格式:
正负号 整数部分.小数部分 指数部分

注意点:

  1. 整数部分 and 小数部分 至少存在一个
  2. 小数点 and 指数部分 至少存在一个
  3. 指数部分格式
    e(or E)整数
    整数不可以少!!!

合法举例:
7. .457 1E5 1.5e-6
不合法举例:
E4 .E5 4.0E

也可以在常数结尾加上类型字符:
F 单精度
L 长双精度
默认为 双精度

此外还需要注意:
浮点数运算 和 数学中的小数运算 因为表示浮点数位数的限制是不一样的!!!
浮点数运算需要考虑到有效位数的问题

2.1.3 字符型数据

比较简单
注意点:

  1. 单个字符记得加''
    值得注意的是,转义字符常量也是一个字符
    转义字符的拓展用法:\dddddd表1~3个八进制数字,表示对应字符的ASCII值;同理\xhhhh表1~2个十六进制数字
  2. 字符串记得加""
    值得注意的是,为单个字符赋值不要用""否则就算其中只有一个字符也是字符串,结尾要多一个空白字符

2.2 基本 输入 and 输出

  1. 单个字符的输入and输出 putchar() and getchar()
    putchar()输出其实参所代表的字符
    可以直接简单来说存在一个 int 向 char 的隐式转换
    而getchar()不需要实参

  2. 格式输出printf()
    printf()转换说明:
    %后 输出修饰符 and 输出格式符 ,输出修饰符可缺省

    完全格式如下:参考
    %[flags][width][.precision][length]specifier

    specifier含义
    d or i十进制输出整数
    o(必须是小写,其他未指明可以大写的都同理)(不带0开头)八进制输出整数
    x or X(不带0x开头)十六进制输出整数
    u无符号十进制输出整数
    f小数形式输出单、双精度浮点数
    e or E指数形式输出单、双精度浮点数
    c输出一个字符
    s输出字符串
    %输出%
    p十六进制输出指针所指向的地址
    flags含义
    -给定width内左对齐(默认右对齐)
    +强制结果前显示正负号(默认省略+)
    #搭配 o、x、X 非零值前显示 0、0x、0X ;搭配 e、E、f 强制输出含小数点
    0左侧补足空格都换成0
    width含义
    (number)输出不超过此长度则用空格补足,若超出则正常输出(不会截断)
    *可以写这个,但没看懂,也一般用不到
    .precision含义
    .number一般用于浮点数,表示小数精确位数,取四舍五入;不过也可以用于整数等
    .*总之可以这样写
    length含义
    h短整型或无符号短整型(适用于i,d,o,u,x,X)
    l长整型或无符号长整型(除适用于整型外,还适用于c and s用于表示宽字符)
    L参数解释为长双精度型(仅适用于浮点说明符)

    此外,鲜为人知的是,printf()也有返回值,成功输出时返回输出的字符总数,否则返回一个负值

  3. 格式化输入scanf()
    参数类型基本上是类似于printf()
    值得注意的是对格式化输入的理解,可以理解为会按照设定的格式提取输入中的数据
    此外还要注意,后续参数是要存储输入的数据的地址(在指针一章中详细叙述)

2.3 数据运算

2.3.1 赋值运算

  1. 简单赋值运算
    变量=表达式
    执行过程:
    1. 右端表达式的运算
    2. 隐式类型转换,将表达式的类型自动转化为变量的类型
    3. 传值,将表达式的值存储到由变量所占的存储单元中
      简单来说,是从右往左的运算顺序
  2. 复合赋值运算
    += -= *= /= %= <<= >>= &= ^= |=
    总的来说就是用于简写的

2.3.2 算术运算

  1. 一般算术运算
    按照操作数的个数 一个 or 两个, 分成 单目运算符 and 双目运算符
    单目运算符:+(取正) -(取负)
    双目运算符:+ - * / %
    双目运算符结合性是从左到右,单目运算符从右向左结合,优先级是单目更高
  2. 自增、自减运算
    也可以说是增1和减1运算
    分别是++--
    对象只能是整型变量或者指针变量
    可以在其之前,也可以在其之后,对变量本身而言都是类似的

2.3.3 关系运算 and 逻辑运算

  1. 关系运算
    < > <= >= == !=
    以上运算符都是对于两者数的比较,条件满足的结果为1,否则为0
    注意:
    1. 前四者的优先级高于后两者
    2. 关系运算符的优先级低于算术运算符的优先级
    3. 关系运算符的结合性是自左向右的
  2. 逻辑运算
    &&(逻辑与) ||(逻辑或) !(逻辑非)
    注意:
    1. 前两者是双目运算符,最后一个是单目运算符
    2. 两者都真,与为真;两者不都假或为真;真非假,假非真;
    3. 优先级:!最高,&&其次,||最低;此外,&& ||低于关系运算符;!则高于算术运算符
    4. 值得注意的性质:前两者判断顺序都是从左到右,此时需要注意
      a && ba为0之后就不会再判断b了;
      同理
      a || ba为1之后就不会再判断b了;

2.3.4 条件运算

条件运算是C语言中唯一一个三目运算,运算符号?:需要三个操作数
一般形式:
表达式1?表达式2:表达式3
执行过程:

  1. 运算表达式1
  2. 表达式1的值非0,计算表达式2,返回其运算的结果(不再执行3)
  3. 表达式1的值为0,则换成3

此外,三者数据类型可以各不相同,后两者类型低的向类型搞得转换

2.3.5 其他运算

此处做简单介绍
主要介绍:逗号运算、sizeof运算、位运算 和 移位运算

  1. 逗号运算
    ,将若干个表达式连接,构成一个逗号表达式
    一般形式:
    表达式1,表达式2,…,表达式n
    执行过程:
    1. 从左到右以此计算
    2. 将最后一个表达式的值作为整个表达式运算的结果
      e.g.
      x = ( i = 3 , i * 2 ) ;
      运算后得i为3,x为6
  2. sizeof运算
    用于返回 对象 or 某种类型 在内存中占据的字节数
    一般形式:
    sizeof(类型名)or sizeof 表达式
  3. 位运算
  4. 移位运算

2.4 表达式

2.4.1 表达式分类

以表达式中优先级别最低的运算符来称呼
主要有以下6种:

  1. 算数表达式
  2. 关系表达式
  3. 逻辑表达式
  4. 赋值表达式
  5. 条件表达式
  6. 逗号表达式

注意点:

  1. 表达式中连续出现连个运算符,最好增加空格符,以避免二义性
  2. 表达式中,可以通过加圆括号强制改变运算顺序
  3. 优先级可以说明表达式的计算顺序,高的先运算,相同时由结合性决定计算顺序
  4. 结合性同样用来说明表达式的计算顺序,主要有两类:大多数自左向右;单目运算符、三目运算符、赋值运算符的结合性自右向左

2.4.2 表达式的类型转换

  1. 隐式类型转换
    表达式中一般要求参与运算的两个操作数的类型一致
    当不一致时,系统会自动将 低类型操作数 转换成另一个 高类型操作数 的类型,再进行运算
    规则如下:
    short char -> int -> unsigned int -> long -> unsigned long -> float -> double -> long double
    进一步说明:
    1. 运算时int类型最低,long double类型最高
    2. short and char型必须先转为int型才能参与运算
    3. 除去2)中两个类型,其余同类型均可直接计算
  2. 强制类型转换
    强制类型转换至将一种表达式的数据类型强制性转换为另一种
    一般格式:
    (类型名)表达式or 类型名 (表达式)
    后者为C++新增用法
    注意:
    1. 浮点型转整形,注意是直接向下取整,而非四舍五入
    2. 当强制转表达式并非单独的变量or常量时,记得加上括号以表示为一个整体
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值