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

c语言第四天笔记

关于 ++混合操作,不同计算结果推理

第一种编译结果:

int i = 5;

int sum = (++i) + (++i)

= 6 + 7

= 13

第二种编译结果:

int i = 5;

int sum = (++i) + (++i)

= 6 + 7

= 7 + 7 前面的7是因为后面i的变化被影响后,重新赋值

= 14

第一种编译结果:

int i = 5;

int sum = (++i)+(i++)

= 6 + 6

= 12

第二种编译结果:

int i = 5;

int sum = (++i)+(i++)

= 6 + 6

= 7 + 6 前面的7是因为后面i的变化被影响后,重新赋值

= 13

注意:

算数运算符,运算结果是数值类型

关系运算符,运算结果是boolean类型(其实就是int的 0-假,非0-真)

逻辑运算符,运算结果是boolean类型(其实就是int的 0-假,非0-真)

运算符

位运算符

说明:按位(bit) 来进行运算操作的运算符。

语法:~ & | ^ <<>>

~:按位取反

说明:单目运算符,数据的每一个bit位取反,也就是二进制数位上的1变0,0变1。

举例:

&:按位与

语法: a & b

说明:首先将参与计算的操作数转换为二级制,然后按照每一位进行对齐,处理结果如下:

总结:如果我们前后两个操作数对齐位置上的二进制数字都是1,其结果是1,否则结果都是0

|:按位或

语法: a | b

说明:首先将参与计算的操作数转换为二级制,然后按照每一位进行对齐,处理结果如下:

总结:如果我们前后两个操作数对齐位置上的二进制数字只要有1,其结果是1,否则结果都是0

^:按位异或

语法: a ^ b  

说明:首先将参与计算的操作数转换为二级制,然后按照每一位进行对齐,处理结果如下:

总结:不同为1,相同为0

左移,按bit位往左偏移

1. 无符号左移:

语法: 操作数<< 移动位数(bit位)

2. 有符号左移:

语法: 操作数 >>移动位数(bit位)

>>:右移,按bit位往右偏移

1. 无符号右移:

语法: 操作数 >> 移动位数(bit位)

2. 有符号右移:

语法: 操作数 >> 移动位数(bit位)

案例:

注意

1. 在进行移位运算的时候,凡是被移出去的位统统丢弃,凡是空出来的位统统补0。移位运算针对的 是无符号整数.

2. 如果非要进行有符号的移位运算,那么左移的时候,空出来的补0,右移的时候,空出来的补符号 位(原码阶段)

其他运算符

赋值运算符

包含: = ,由 右 -> 左,优先级排倒数第二。

注意:赋值运算符的左边(左操作数)必须是可写的地址。

复合赋值运算符

包含: += -= *= /= %= ,由 右 -> 左,优先级倒数第二。

三目运算符

语法: 表达式1?表达式2:表达式3 ,其实就是if..else..简化版

求值顺序:

如果表达式1的值为1,则整个条件运算表达式的值为表达式2的值;

如果表达式1的值为0,则整个条件运算表达式的值为表达式3的值;

练习

1. 使用三目运算符比较三个任意整型数的最大值?

sizeof(int)

说明:用来计算某种类型或者变量所占的字节数。(中文英文字符集问题,不标准)

逗号运算符(,)

说明:优先级最低,左->右,由多个运算符将多个不同的式子连接起来的表达式称之为逗号表达式

语法:

求值顺序:先求表达式1,再求表达式2,以此类推,整个逗号表达式的值为表达式n的值。

注意:

1. 逗号表达式的优先级最低

2. 运算顺序从左往右

3. 整个逗号表达式的值取决于最右边的表达式的值

举例:

优先级的顺序

C语言程序设计结构

程序 = 数据结构 + 算法

算法:对于问题解决的方法思路或者步骤

算法的特征:

有穷性:问题需要在有限的步骤内完成

可行性:解决步骤和方法思路必须要切实可行

确定性:每一个代码指令要有明确的功能含义

算法的描述:流程图

流程图符号:

C语言程序设计的设计结构

三大结构:顺序结构、分支(选择)结构、循环结构

顺序结构

说明:各操作是按先后顺序执行的。是最简单的一种基本结构。这个也是默认的结构。

流程图:

选择结构

说明:又被称之为分支结构,根据条件是否成立,选择对应的操作。

流程图:

循环结构

说明:

又被称之为重复结构

当型循环

特点:先判断条件,后执行语句,语句可能一次也得不到执行

流程图:

直到型循环

特点:先执行语句,后判断条件,语句至少执行一次

C语言的语句

分类

控制语句:while.. for.. if..else... ...

函数调用语句:scanf(...);

表达式语句:b=3;

空语句:;

复合语句:{...}

关注:输入输出语句(printf()/scanf())

输入输出缓冲机制

概述

缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间, 这些存储空间用来缓冲输入 或者输出的数据,这部分预留的空间叫做缓冲区。缓冲区根据其对应的是 输入设备还是输出设备,分为输入缓冲区和输出缓冲区。

为什么要有缓冲区

1)减少IO设备的操作

2)提高计算机的运行速度。

比如:我们从磁盘里读取信息,先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓 冲区的数据取完后再去磁盘中读取,这样就减少磁盘的读写次数,再加上计算机对缓冲区的操作大大 快于磁盘的操作,故应用缓冲区可大大提高计算机的运行速度

缓冲区的类型

全缓冲:当填满缓冲区之后,才会进行实际IO操作。 比如 对磁盘文件的读写。 ---window 全缓冲大小 4096字节 linux 全缓冲大小 1024字节

行缓冲:当在输入和输出中遇到换行符时,执行真正的IO操作,也就是冲刷缓冲区的数据。比如键盘 输入数据

不带缓冲:也就是不进行缓冲,标准出错情况stderr是典型代表,这使得出错信息可以直接尽快地显示 出来。

引发缓冲区的刷新

1、遇到换行符\n

2、缓冲区满(溢出)

3、执行fflush(stdout),手动刷新缓冲区

原理实现

fflush(),才会将输出缓冲区的数据输出到标准输出设备。(打印机也是,我们测试用的是控制台显示 终端)

案例: 6818开发板图像绘制

需求:将一张BMP图片显示到开发板的LCD屏幕上

说明:

屏幕显示:BGR

图片显示:RGB

实现:

RGB --> BGR

B:右移0个字节,也就是移动0位 B >> 0

R:右移2个字节,也就是移动16位 R >> 16

G:右移1个字节,也就是移动8位 G >> 8

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 萝卜快跑:自动驾驶的先锋与挑战
  • unity基础问题
  • 后端开发刷题 | 笔试
  • 【React】详解样式控制:从基础到进阶应用的全面指南
  • react中如何mock数据
  • Dav_笔记10:Using SQL Plan Management之4
  • 实战:Redis实现排行榜、点赞和关注功能的基本操作
  • 谷粒商城实战笔记-59-商品服务-API-品牌管理-使用逆向工程的前后端代码
  • mysql中You can’t specify target table for update in FROM clause错误
  • Android SurfaceFlinger——GraphicBuffer内存申请(三十)
  • 基于Pytorch框架的深度学习densenet121神经网络鸟类行为识别分类系统源码
  • 从json到protobuf,接口效率的提升
  • 领略诗词之妙,发觉生活之美。
  • 机器学习课程学习周报五
  • 初学Mybatis之 Lombok 篇
  • CSS魔法堂:Absolute Positioning就这个样
  • ECS应用管理最佳实践
  • extjs4学习之配置
  • Fastjson的基本使用方法大全
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • MySQL数据库运维之数据恢复
  • PAT A1120
  • Protobuf3语言指南
  • Python3爬取英雄联盟英雄皮肤大图
  • SwizzleMethod 黑魔法
  • 讲清楚之javascript作用域
  • 批量截取pdf文件
  • 前端性能优化——回流与重绘
  • 实现菜单下拉伸展折叠效果demo
  • 实现简单的正则表达式引擎
  • 使用权重正则化较少模型过拟合
  • 手机端车牌号码键盘的vue组件
  • 数据可视化之 Sankey 桑基图的实现
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​探讨元宇宙和VR虚拟现实之间的区别​
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • # Spring Cloud Alibaba Nacos_配置中心与服务发现(四)
  • ###C语言程序设计-----C语言学习(6)#
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (C语言)fread与fwrite详解
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (六)DockerCompose安装与配置
  • (七)Flink Watermark
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转)Sublime Text3配置Lua运行环境
  • (转)甲方乙方——赵民谈找工作
  • .net core使用ef 6
  • .NET Micro Framework初体验(二)
  • .Net的DataSet直接与SQL2005交互
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .net开发引用程序集提示没有强名称的解决办法
  • [ C++ ] STL priority_queue(优先级队列)使用及其底层模拟实现,容器适配器,deque(双端队列)原理了解
  • [ vulhub漏洞复现篇 ] struts2远程代码执行漏洞 S2-005 (CVE-2010-1870)
  • [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序...
  • [20170728]oracle保留字.txt