当前位置: 首页 > news >正文

【零基础C语言】第二节 数据类型、运算符、表达式

 涉及数制、进制、码制相关知识点:

【零基础C语言】第一节 C语言概述+【数制进制码制】-CSDN博客

目录

一、C语言词汇

1.1 标识符(考点)

1.2 关键字

(1)sizeof()  ☆考点

(2)typedef()  ☆考点

1.3 运算符

☆运算符优先级

二、常量和变量

2.1 常量

2.1.1 字面常量

(1)整型常量

(2)浮点型常量 

(3) 字符型常量

2.1.2 符号常量

(1)宏常量

(2)const常量

2.2 变量

(1)变量的定义/声明

(2)变量的赋值

 三、数据类型

字符类型

3.1 变量的类型决定了什么? 

3.2 占用内存空间的大小

3.3 不同数据类型的表示范围

3.4 可参与的运算

3.5 字节存储顺序

 3.6 计算机存储的 +1 和 -1?

四、表达式

 (1)强制类型转换表达式

(2)赋值表达式

(3)运算表达式(自增自减) 

一、C语言词汇

1.1 标识符(考点)

即程序中使用的变量名、函数名等

  • 只能包含 字母(Aa~Zz)、数字(0-9)、下划线(_)   简洁有意义
  • 只能字母和下划线开头
  • 大小写敏感:C语言区分大小写,字母大写和小写是不同的变量名
  • 避免使用保留字:不能使用C语言的关键字和保留字作为变量名
C语言字符集合

1.2 关键字

(1)sizeof()  ☆考点

  • sizeof(类型):类型占用的内存字节数
  • sizeof(变量或表达式):变量或表达式所属类型所占的内存字节数

增加程序的可执行性

编译时执行的运算符,不会导致额外的运行时间开销

(2)typedef()  ☆考点

typedef:为现有数据类型创建一个新的名字。typedef 数据类型 别名

1.3 运算符

  • 算术运算符(7个):+-*/%、++、--
  • 关系运算符(6个):><>= <=、==!=
  • 逻辑运算符(3个):&&||、 !
  • 赋值运算符(1个):=
  • 位运算符(6个):<<(向左移位)、>>(向右移位)、~(取反)、 |(按位或)、^(按位异或)、&(按位与)
a=3;a<<4;     00000011(十进制3) 向左移4位 00110000(48)
a=15;a>>2;         00001111(十进制15) 向右移2位 00000011(3)
~9;0000000000001001(十进制9)取反1111111111110110
9|5=13;两数对应的二进制位执行或运算,一真为真,双假为假
9^5=12;两数对应的二进制位相异或,值相同为0,相反为1
9&5=1;两数对应的二进制位执行与运算,双真为真,一假为假

☆运算符优先级

运算符分为单目(一元),双目(二元)和三目(三元)。顾名思义,目,即运算符操作数的个数

类型说明举例
单目操作数只有一个,从右向左a++(a自增1)
双目操作数有两个,从左向右a + b(两数之和)
三目目前仅有条件运算符a ? b : c(如果a为真,结果为b,否则为c

优先级运算符名称或含义使用形式说明方向
1[]数组下标数组名[常量表达式]----左到右
()圆括号(表达式)
函数名(形参表)
.成员选择(对象)对象.成员名
->成员选择(指针)对象指针->成员名
2-负号运算符-表达式单目右到左
(类型)强制类型转换

(类型名)表达式

++自增

单目

--自减--变量名
变量名--
*取值*指针变量
&取地址运算符&变量名
!逻辑非!表达式
~按位取反运算符~表达式
sizeof长度运算符sizeof(表达式)
3/得到的整数部分双目左到右
*表达式*表达式
%求余(取模)必须是整型,整除后的余数
4+表达式+表达式
-表达式-表达式
5<<左移变量<<表达式
>>右移变量>>表达式
6>大于表达式>表达式
>=大于等于表达式>=表达式
<小于表达式<表达式
<=小于等于表达式<=表达式
7==等于判断是否相等
!=不等于判断是否不等
8&按位与表达式&表达式
9^按位异或表达式^表达式
10|按位或表达式|表达式
11&&逻辑与AA和B
12||逻辑或A或B
13?:条件运算符表达式1? 表达式2: 表达式3三目右到左
14=赋值变量=表达式---------右到左
/=除后赋值变量/=表达式
*=乘后赋值变量*=表达式
%=取模后赋值变量%=表达式
+=加后赋值变量+=表达式
-=减后赋值变量-=表达式
<<=左移后赋值变量<<=表达式
>>=右移后赋值变量>>=表达式
&=按位与后赋值变量&=表达式
^=按位异或后赋值变量^=表达式
|=按位或后赋值变量|=表达式
15,逗号运算符表达式,表达式,…左到右

二、常量和变量

程序执行过程中,取值不发生改变的量是常量,取值可变的是变量

2.1 常量

2.1.1 字面常量

(1)整型常量
整形常量前缀合法示例
八进制整常数00,016,0101
十六进制整常数0x 或 0X0x1A,0XFFFF
十进制整常数无前缀123,456,7890
(2)浮点型常量 
c 语言中,实型常量可以表现为十进制小数形式或者指数形式
实型常量描述合法示例
十进制小数形式由数字 0~9 和小数点组成。0.0,-2.87,.5,1,3.14
指数形式由十进制数、e 或 E 以及指数组成。1.5e10,-2.5E-3,6.02e23
类型存储大小值范围精度
float4 字节-3.4E-38 到 3.4E+386 位小数
double8 字节-1.7E-308 到 1.7E+30815 位小数
long double16 字节-1.1E-4932 到 1.1E+493219 位小数
(3)字符型常量
  • 由单引号括起来的一个字符 如'x','y'等都是合法的字符。
  • 以反斜杠\开头的字符序列,被称为转义字符
字符表示功能
\n换行
\t横向跳到下一制表位置
\"双引号
\'单引号
\\反斜线
\ddd1-3 位八进制数所代表的字符 (ASCII)
\xhhh1-2 位十六进制数所代表的字符 (ASCII)

2.1.2 符号常量

(1)宏常量
  • 使用标识符,在使用前需要先定义
  • 慎用符号(考虑要不要分号)
  • 预编译阶段发生替换:处理“程序中的编译预处理命令” 的结果 + 源程序 ——>编译得到目标代码

    定义方法:#define 标识符 字符串

    缺点:

    1. 没有数据类型,编译器在进行宏替换时不进行类型检查
    2. 只进行简单的字符串替换,极易产生意想不到的缺点
    (2)const常量
    • 有数据类型,进行类型检查
    • 某些集成化调试工具可以对其进行调试

    2.2 变量

    (1)变量的定义/声明

    变量使用之前必须先声明变量,只有一次

    int main() {int a;int b,c;     //定义变量}

    (2)变量的赋值

    变量使用之前一定要赋值

    变量使用“=”赋值,等号左侧为左值,等号右侧为右值

    int main(){int a,b;char ch;a=3,b=4;ch= 'c';
    }
    int main(){int a = 3,b =4;  char ch ='c';  //初始化double d = 3.14, e = 2.58;   //定义变量并初始化ch = 'd';      //赋值:变量已存在(对应空间已开辟),将字符d直接放到一个已经存在的空间中}

     三、数据类型

    字符类型

    3.1 变量的类型决定了什么? 

    地址:每个变量都分配了一个内存地址

    • 使用&(地址运算符)获取变量的内存地址
    • 通过指针访问和操作变量的内存地址

    32位机的内存地址是32位,从0x00000000到0xFFFFFFFF

    编译器按照变量定义的类型分配相应大小的内存空间

    3.2 占用内存空间的大小

    如:unsigned类型  VS 有符号类型;整数型VS 浮点数;字符型 VS 整型

    3.3 不同数据类型的表示范围

    与解释方式和长度有关

    float大概能表达6-7位小数

    char ——> 1字节 ——>8位——> 有1个符号位

    unsigned char ——> 1字节 ——>8位——>没有符号位

    3.4 可参与的运算

    整型   :加减乘除余

    浮点型:加减乘除

    字符型:加减 (ASCII码)

    3.5 字节存储顺序

      主要分为大端序(Big-endian)和小端序(Little-endian),区别如下

      类型解释备注
      Big-endian高位字节存入低地址,低位字节存入高地址与从左到右的书写顺序相同,便于处理字符串
      Little-endian低位字节存入低地址,高位字节存入高地址便于计算机从低位字节向高位字节运算

       3.6 计算机存储的 +1 和 -1?

      计算机中所有的数据都是采用补码存放的。

      符号位 0 为正、1 为负

      正整数 —— 源码存储,最高位为 0(正) ,正数:原码 =补码
      负整数—— 补码存储,最高位为 1 (负),负数:补码=原码符号位不变,其余各位取反,在+1

      四、表达式

      表达式 = 运算符 + 运算对象

      运算结果取决于占内存大的运算对象的数据类型

      ----------------回看运算符优先级部分↑----------------- 

       (1)强制类型转换表达式

      2种类型转换:

      • 一种是自动,在运算时不需要用户指定,系统自动进行的类型转换,如3+6.5
      • 一种就是强制,当自动不能实现目的时,可以用强制
      int b =7;    float a = 2.5,c = 4.7;a + (int)(b/3 *(int)(a+c)/2.0)%4 
      =2.5 +(int)(2 * 7/2.0)%4
      =2.5 + 7 %4 
      = 2.5+3 
      = 5.5

      (2)赋值表达式

      (3)运算表达式(自增自减) 

      int m =1;

      n = ++m;

      m先自增1,再赋值给n,所以n=2

      int m = 1;

      n = m++; 

      m先赋值给n,m再自增1,所以n=1

      ----------------回看运算符优先级部分↑------------------

      五、附:标准 ASCII 码对照表

      ASCII 值控制字符ASCII 值字符ASCII 值字符ASCII 值字符
      0NUL32(space)64@96
      1SOH33!65A97a
      2STX34"66B98b
      3ETX35#67C99c
      4EOT36$68D100d
      5ENQ37%69E101e
      6ACK38&70F102f
      7BEL39'71G103g
      8BS40(72H104h
      9HT41)73I105i
      10LF42*74J106j
      11VT43+75K107k
      12FF44,76L108l
      13CR45-77M109m
      14SO46.78N110n
      15SI47/79O111o
      16DLE48080P112p
      17DCI49181Q113q
      18DC250282R114r
      19DC351383S115s
      20DC452484T116t
      21NAK53585U117u
      22SYN54686V118v
      23TB55787W119w
      24CAN56888X120x
      25EM57989Y121y
      26SUB58:90Z122z
      27ESC59;91[123{
      28FS60<92\124
      29GS61=93]125}
      30RS62>94^126`
      31US63?95_127DEL


      http://www.mrgr.cn/news/92732.html

      相关文章:

    • 蓝桥杯 之 填空题-位运算与循环
    • Linux云计算SRE-第十五周
    • 【deepseek第一课】从0到1介绍 采用ollama安装deepseek私有化部署,并实现页面可视化
    • C语言32个关键字
    • 【C++编程探索】01前缀和来临!优点多多!八千字详解
    • 我的AI工具箱Tauri+Django环境开发,支持局域网使用
    • AI关于SHAP分析与列线图(算法)解释线性模型矛盾之处的解释
    • QT异步编程之线程池QThreadPool
    • 网络流算法: Edmonds-Karp算法
    • 【算法方法总结·一】二分法的一些技巧和注意事项
    • PyQT(PySide)的上下文菜单策略设置setContextMenuPolicy()
    • 机器学习--(随机森林,线性回归)
    • ICP-通过一组匹配的3D点估计相机运动
    • 大模型WebUI:Gradio全解12——LangChain原理、架构和组件(3)
    • 细说 Java 线程池
    • AI 数据集生成和模型微调框架 Distilabel 高级指南:深度功能与最佳实践
    • Apache Spark中的依赖关系与任务调度机制解析
    • 数据库MySQL,在终端输入后,提示不是内部命令等
    • 《机器学习数学基础》补充资料:矩阵的LU分解
    • 硬编码(三)经典变长指令一