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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/50645.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Html+Css网页开发之动态登录页面(默认Chrome)

>>效果展示图<< 一、需求分析与设计要求 实现了一个动态背景图案的效果&#xff0c;包括一个白色的容器&#xff0c;内部有一个标题、一个输入框、一个按钮和一些文本。 背景是一个渐变色的线性渐变&#xff0c;而在容器的周围&#xff0c;有一些随机的方形和圆形图…

【CN】Argo 持续集成和交付(一)

1.简介 Argo 英 [ˈɑ:ɡəu] 美 [ˈɑrˌɡo] Kubernetes 原生工具&#xff0c;用于运行工作流程、管理集群以及正确执行 GitOps。 Argo 于 2020 年 3 月 26 日被 CNCF 接受为孵化成熟度级别&#xff0c;然后于 2022 年 12 月 6 日转移到毕业成熟度级别。 argoproj.github.i…

【数学建模】权重生成与评价模型(下)

文章目录 权重生成与评价模型&#xff08;下&#xff09;5. 模糊综合评价法5.1 模糊综合分析法的原理5.2 模糊综合分析法的案例 6. 秩和比分析法6.1 秩和比分析法原理6.2 秩和比分析法案例6.3 RSR的分布及其计算确定RSR的分布计算回归方程示例代码实现代码解释 6.4 秩和比分析法…

Godot入门 02玩家1.0版

添加Node2D节点&#xff0c;重命名Game 创建玩家场景&#xff0c;添加CharacterBody2D节点 添加AnimatedSprite2D节点 从精灵表中添加帧 选择文件 设置成8*8 图片边缘模糊改为清晰 设置加载后自动播放&#xff0c;动画循环 。动画速度10FPS&#xff0c;修改动画名称idle。 拖动…

【数据结构初阶】单链表经典算法题十二道——得道飞升(上篇)

目录 1、移除元素 2、反转链表 3、链表的中间节点 4、合并两个有序链表 Relaxing Time&#xff01;&#xff01;&#xff01; ———————————————— 天气之子幻 ———————————————— 1、移除元素 思路&#xff1a; 创建一个新链表&#xff0…

Open3D 获取点云中指定高度区域的所有点

目录 一、概述 1.1实现步骤 1.2应用 二、代码实现 1.1关键函数 1.2完整代码 三、实现效果 3.1原始点云 3.2处理后点云 Open3D点云算法汇总及实战案例汇总的目录地址&#xff1a; Open3D点云算法与点云深度学习案例汇总&#xff08;长期更新&#xff09;-CSDN博客 一、…

CentOS 7.x 的 YUM 仓库问题

背景 CentOS Linux 7 的生命周期&#xff08;EOL&#xff09;已经于 2024 年 6 月 30 日终止这意味着 CentOS 7.x 的官方镜像站点将不再提供服务&#xff0c;导致在使用 yum 安装或更新程序时可能会遇到 错误。本文将介绍如何解决这一问题&#xff0c;使得你可以继续在 CentOS…

【vim】ubuntu20-server 安装配置 vim 最新最详细

在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。【vim】ubuntu20-server 安装配置 vim 最新最详细 开发环境一、vim github二、安装必…

Elasticsearch 使用误区之三——分片设置不合理

Elasticsearch 是一个强大的搜索和分析引擎&#xff0c;它通过将数据分散到多个节点的分片中来进行分布式处理。 本文将探讨分片大小和策略的概念&#xff0c;以优化 Elasticsearch 的性能并防止过度分片或分片过大等问题。 先看个分片设置不合理的真实企业案例&#xff1a; 10…

CSS:position属性

一、属性值 1.1 fixed 固定位置的元素&#xff0c;相对于浏览器窗口进行定位。 元素的位置通过 “left”, “top”, “right” 以及 “bottom” 属性进行规定。 网站中的固定 header 和 footer 就是用固定定位来实现的&#xff1b; header效果图 footer效果图 1.2 absol…

Linux系统安装Cobol语言及IBM大型机模拟软件Hercules

COBOL&#xff08;Common Business-Oriented Language&#xff09;起源于50年代中期&#xff0c;是一种面向过程的高级程序设计语言&#xff0c;主要用于商业和数据处理领域。经过不断发展和标准化&#xff0c;已成为国际上应用最广泛的商业编程语言之一&#xff0c;在某red书上…

Windows Server搭建局域网NTP时间服务器与客户端通实现

1.服务器环境&#xff1a; win11更改注册表 winR输入regedit win11更改注册表 winR输入regedit 2.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config&#xff0c;找到Config目录&#xff0c;双击Config目录下的AnnounceFlags&#xff0c;设为5。 3.HKEY_L…

Nginx 配置与优化:常见问题全面解析

文章目录 Nginx 配置与优化:常见问题全面解析一、Nginx 安装与配置问题1.1 Nginx 安装失败问题描述解决方法1.2 Nginx 配置文件语法错误问题描述解决方法二、Nginx 服务启动与停止问题2.1 Nginx 无法启动问题描述解决方法2.2 Nginx 服务无法停止问题描述解决方法三、Nginx 性能…

Http 和 Https 的区别(图文详解)

在现代网络通信中&#xff0c;保护数据的安全性和用户的隐私是至关重要的。HTTP&#xff08;Hypertext Transfer Protocol&#xff09;和 HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;是两种常见的网络通信协议&#xff0c;但它们在数据保护方面的能力存在…

snkemake入门

一、背景介绍 snakemake是一种用于自动化流程的开源工具&#xff0c;是一款基于python3的软件。在生物信息学、高通量测序数据分析、大规模数据处理等领域非常流行。 snakemake的官网&#xff1a;Snakemake | Snakemake 8.16.0 documentationhttps://snakemake.readthedocs.i…

自监督学习概述(Self-Supervised Learning,SSL)

自监督学习&#xff08;Self-Supervised Learning&#xff0c;SSL&#xff09;是一种机器学习方法&#xff0c;旨在利用未标记数据进行训练。这种方法通过从数据本身生成伪标签&#xff0c;来创建监督信号&#xff0c;使得模型能够学习有效的数据表示。自监督学习在深度学习领域…

C++ | Leetcode C++题解之第283题移动零

题目&#xff1a; 题解&#xff1a; class Solution { public:void moveZeroes(vector<int>& nums) {int n nums.size(), left 0, right 0;while (right < n) {if (nums[right]) {swap(nums[left], nums[right]);left;}right;}} };

MathType 7.8中文直装版2024年最新图文安装破解教程

MathType公式编辑器 v7.8中文破解版是一款适用于Windows和Macintosh的便捷交互式公式编辑器&#xff0c;可帮助您进行文字处理、网页、桌面设计、演示文稿制作、学习TeX、LaTeX和MathML文档创建。 MathType 7.8这个工具允许用户创建、修改公式和插入多个文档。有了这个软件&…

​CSS技巧专栏:一日一例 13 -纯CSS实现晃晃悠悠背景不停滚动的按钮特效​

CSS技巧专栏:一日一例 13 -纯CSS实现晃晃悠悠背景不停滚动的按钮特效​ 大家好,本篇文章给大家带来一个可爱的按钮,像个小宠物等待你抚摸和奖励,不知道它会不会引起你的关注呢?页面上这样的一个按钮,会不会让你忍不住把鼠标移动过去点一下呢? 本例图片 案例分析 这个…

机械学习—零基础学习日志(高数12——反三角函数)

零基础为了学人工智能&#xff0c;真的开始复习高数 反三角函数很困难&#xff0c;但是当建立了逻辑链条&#xff0c;还是能快速理解的。这个办法就是笛卡尔坐标系。 三角函数与反三角函数的个人理解 sinx与cosx&#xff0c;tanx&#xff0c;secx&#xff0c;其实都可以放在…