-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathatom.xml
169 lines (83 loc) · 181 KB
/
atom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>青云君上</title>
<link href="https://yyzqlqc.github.io/atom.xml" rel="self"/>
<link href="https://yyzqlqc.github.io/"/>
<updated>2022-12-26T16:21:25.062Z</updated>
<id>https://yyzqlqc.github.io/</id>
<author>
<name>wu~~</name>
</author>
<generator uri="https://hexo.io/">Hexo</generator>
<entry>
<title>树莓派PICO入门教程</title>
<link href="https://yyzqlqc.github.io/post/2b5d6bfb.html"/>
<id>https://yyzqlqc.github.io/post/2b5d6bfb.html</id>
<published>2022-12-26T16:21:25.042Z</published>
<updated>2022-12-26T16:21:25.062Z</updated>
<content type="html"><![CDATA[<p><a href="https://pico.org.cn/">树莓派 Pico 中文站</a></p><h1 id="1-板子介绍"><a href="#1-板子介绍" class="headerlink" title="1.板子介绍"></a>1.板子介绍</h1><p><img src="https://img-blog.csdnimg.cn/30fbdffa7f8247f399daaa6648710ccb.png" alt="![[Pasted image 20220920122543.png]]"></p><p>:</p><ul><li>微型usb连接器 microUSB 数据通信,提供动力</li><li>On-board LED 板载LED 在自己专用的GPIO端口 峰值上的唯一LED<br>不会给出电源任何施加到上面的指示</li><li>boot select按钮 启动模式选择 引导加载程序</li><li>Debug Pins 调试连接器 pico支持两线串行通过这个进行调试</li><li>rp2040微控制器芯片</li></ul><p><img src="https://img-blog.csdnimg.cn/d57ad3b8b77a4bceaa5a145827b5f810.png" alt="![[Pasted image 20220920122934.png]]"></p><ul><li>32位双核 arm-cortex m zero plus 芯片</li><li>以48兆赫的的正常时钟速度运行,并可提升至133兆赫</li><li>2兆字节的板载外部内存</li><li>板载实时时钟</li><li>板载温度传感器</li></ul><p><img src="https://img-blog.csdnimg.cn/cd59e636f640492f8850f927966acefc.png" alt="![[Pasted image 20220920123303.png]]"></p><ul><li>要么使用引脚,要么表面安装</li><li>8个接地点 其中一个是1个调试的一部分 接地点发布均匀</li><li>所有的接地连接是方行焊盘而不是圆形焊盘</li></ul><p><img src="https://img-blog.csdnimg.cn/06171eab73b445179912d3d2f07f0f74.png" alt="![[Pasted image 20220920124224.png]]"></p><ul><li>v总线和输出的微型usb电缆电压 连接5v 无连接v总线无输出 </li><li>系统的输入功率 可以在2到5v的电压下运行该系统 尽管pico是3.3v逻辑机</li><li>引脚36上的3.3输出是pico的内部电压调节器的3.3输出 可以用来驱动外部设备,但不要超过3亿</li><li>3.3伏使能可启用 扳上的3.3伏电源 可以外部打开或关闭</li><li>run连接 rp2040微控制器的使能连接 可以用作微控制器的复位</li></ul><p><img src="https://img-blog.csdnimg.cn/379e2633554d419d85451c59adda2244.png" alt="![[Pasted image 20220920124407.png]]"></p><ul><li>26个裸露的gpio引脚</li><li>内部的第27个TPIO引脚用于板载LED</li></ul><p><img src="https://img-blog.csdnimg.cn/27ea7d79ce0d4914a4a2afa45557886d.png" alt="![[Pasted image 20220920124735.png]]"></p><ul><li>12位模数转换器</li><li>3个内部模数转换器</li><li>内部ADC用于温度传感器</li><li>ADC vref gnd 用于外部基准电压源 以提高模数转换器的精度</li></ul><p><img src="https://img-blog.csdnimg.cn/e0892157ce9a4318b0166db4986be3b3.png" alt="![[Pasted image 20220920125113.png]]"></p><ul><li>2个I2C总线</li><li>2个SPI总线</li><li>2个URAT</li><li>16个PWM通道</li></ul><p><img src="https://img-blog.csdnimg.cn/ab59e47948e04263bed21502f01da16d.png" alt="![[Pasted image 20220920125351.png]]"></p><ul><li>普通的微控制器运行</li><li>使用micro usb 端口通电</li><li>使用电池供电,能够在低压2伏特的电压下工作</li><li>作为usb 设备运行</li><li>micro python 或 c</li></ul><h1 id="2-led开关"><a href="#2-led开关" class="headerlink" title="2.led开关"></a>2.led开关</h1><p><img src="https://img-blog.csdnimg.cn/fb8eb87ebb2742ff9787992cd6312edb.png" alt="![[Pasted image 20220920131020.png]]"></p><ul><li>26个gpio引脚,大多数的引脚支持带调制的脉冲</li><li>3.3v的逻辑器件</li><li>内置上拉电阻和下拉电阻,最大限度的减少所需的电路数量</li></ul><p><img src="https://img-blog.csdnimg.cn/085626eae58645119f6e84c92802676b.png" alt="![[Pasted image 20220920132001.png]]"></p><p>可以用3个红绿蓝LED<br>或者一个LED</p><p>瞬间接触开关<br>一红一黑</p><p>3LED 需要3个降压电阻 330欧姆的电阻</p><p>引脚14(gpio引脚10) 连接到其中一个电阻器,连接到红色LED的阳极<br>引脚15(gpio引脚11) 连接到其中一个电阻器,连接到绿色LED的阳极<br>引脚19(gpio引脚14) 连接到其中一个电阻器,连接到蓝色LED的阳极</p><p>引脚23 上的接地点;连接到LED上的公共阴极</p><p>引脚4 (gpio引脚2)连接到黑色开关的一侧<br>引脚20 (gpio引脚15)连接到红色开关的一侧</p><p>引脚3 接地 连接到黑色开关的另一侧</p><p>pin引脚36 3.3v输出 连接到红色开关的另一侧</p><p>循环亮3种不同颜色</p><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">import</span> machine<span class="token keyword">import</span> utime<span class="token comment"># 对应引脚并打开输出</span>led_red <span class="token operator">=</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">.</span>OUT<span class="token punctuation">)</span>led_green <span class="token operator">=</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">(</span><span class="token number">11</span><span class="token punctuation">,</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">.</span>OUT<span class="token punctuation">)</span>led_blue <span class="token operator">=</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">(</span><span class="token number">14</span><span class="token punctuation">,</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">.</span>OUT<span class="token punctuation">)</span><span class="token keyword">while</span> <span class="token boolean">True</span><span class="token punctuation">:</span> led_red<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span> led_green<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> led_blue<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> utime<span class="token punctuation">.</span>sleep<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span> led_red<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> led_green<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span> led_blue<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> utime<span class="token punctuation">.</span>sleep<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span> led_red<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> led_green<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> led_blue<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span> utime<span class="token punctuation">.</span>sleep<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span> led_red<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span> led_green<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span> led_blue<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> utime<span class="token punctuation">.</span>sleep<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span> led_red<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span> led_green<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> led_blue<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span> utime<span class="token punctuation">.</span>sleep<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span> led_red<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> led_green<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span> led_blue<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span> utime<span class="token punctuation">.</span>sleep<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span> led_red<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span> led_green<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span> led_blue<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span> utime<span class="token punctuation">.</span>sleep<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"End of Loop"</span><span class="token punctuation">)</span> led_red<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> led_green<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> led_blue<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> utime<span class="token punctuation">.</span>sleep<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span> <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h1 id="4-开关控制:"><a href="#4-开关控制:" class="headerlink" title="4.开关控制:"></a>4.开关控制:</h1><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">import</span> machine <span class="token keyword">import</span> utime <span class="token comment">#时间有关的库</span>button_red <span class="token operator">=</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">(</span><span class="token number">15</span><span class="token punctuation">,</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">.</span>IN<span class="token punctuation">,</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">.</span>PULL_DOWN<span class="token punctuation">)</span> <span class="token comment"># gpio15 输入 下拉电阻,因为红灯的</span> <span class="token comment"># 的一段是3.3v 所以一直保持低位</span> <span class="token comment"># 当开关接通时,它将激活并将其拉高</span>button_black <span class="token operator">=</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">.</span>IN<span class="token punctuation">,</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">.</span>PULL_UP<span class="token punctuation">)</span> <span class="token comment"># 上拉电阻,降低即开始</span><span class="token keyword">while</span> <span class="token boolean">True</span><span class="token punctuation">:</span> <span class="token keyword">if</span> button_red<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">1</span><span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Red"</span><span class="token punctuation">)</span> <span class="token keyword">if</span> button_black<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">0</span><span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Black"</span><span class="token punctuation">)</span> utime<span class="token punctuation">.</span>sleep<span class="token punctuation">(</span><span class="token number">0.25</span><span class="token punctuation">)</span> <span class="token comment"># 延迟</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h1 id="5-中断:"><a href="#5-中断:" class="headerlink" title="5.中断:"></a>5.中断:</h1><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">import</span> machine<span class="token keyword">import</span> utimeled_red <span class="token operator">=</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">.</span>OUT<span class="token punctuation">)</span>led_green <span class="token operator">=</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">(</span><span class="token number">11</span><span class="token punctuation">,</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">.</span>OUT<span class="token punctuation">)</span>led_red<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span>led_green<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> <span class="token comment"># 关灯</span>button_red <span class="token operator">=</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">(</span><span class="token number">15</span><span class="token punctuation">,</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">.</span>IN<span class="token punctuation">,</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">.</span>PULL_DOWN<span class="token punctuation">)</span> <span class="token comment"># 正常下拉电阻为低,除非按他就会拉高</span><span class="token keyword">def</span> <span class="token function">in_handler</span><span class="token punctuation">(</span>pin<span class="token punctuation">)</span> button_red<span class="token punctuation">.</span>irq<span class="token punctuation">(</span>handler<span class="token operator">=</span><span class="token boolean">None</span><span class="token punctuation">)</span> <span class="token comment"># 关闭此引脚的中断</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Interrupt Detected!"</span><span class="token punctuation">)</span> led_red<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span> led_green<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> utime<span class="token punctuation">.</span>sleep<span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">)</span> <span class="token comment"># 休眠在中断不常见,这是个示范</span> led_red<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> button_red<span class="token punctuation">.</span>irq<span class="token punctuation">(</span>handler<span class="token operator">=</span>int_handler<span class="token punctuation">)</span> <span class="token comment"># 重新设置程序,然后才能再次工作</span>button_red<span class="token punctuation">.</span>irq<span class="token punctuation">(</span>trigger<span class="token operator">=</span>machine<span class="token punctuation">.</span>Pin<span class="token punctuation">.</span>IRQ_RISING<span class="token punctuation">,</span> handler<span class="token operator">=</span>int_handler<span class="token punctuation">)</span><span class="token comment"># 修复中断请求 触发中断 我们在上升信号时触发它(低到高) 此时传入一个被称为中断处理程序的函数</span><span class="token comment"># 每次按下按钮会有一个中断,就调用这个函数</span><span class="token comment"># 不被中断时</span><span class="token keyword">while</span> <span class="token boolean">True</span><span class="token punctuation">:</span> led_green<span class="token punctuation">.</span>toggle<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment"># 切换函数 ,获取输出状态并将其反转</span> <span class="token comment"># led将开或关,就反转成</span> utime<span class="token punctuation">.</span>sleep<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h1 id="6-按按钮灯循环亮:"><a href="#6-按按钮灯循环亮:" class="headerlink" title="6.按按钮灯循环亮:"></a>6.按按钮灯循环亮:</h1><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">import</span> machine<span class="token keyword">import</span> utime<span class="token comment"># 对应引脚并打开输出</span>led_red <span class="token operator">=</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">.</span>OUT<span class="token punctuation">)</span>led_green <span class="token operator">=</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">(</span><span class="token number">11</span><span class="token punctuation">,</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">.</span>OUT<span class="token punctuation">)</span>led_blue <span class="token operator">=</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">(</span><span class="token number">14</span><span class="token punctuation">,</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">.</span>OUT<span class="token punctuation">)</span>led_red<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span>led_green<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span>led_blue<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span>button_black <span class="token operator">=</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">.</span>IN<span class="token punctuation">,</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">.</span>PULL_UP<span class="token punctuation">)</span> <span class="token comment"># 上拉电阻,降低即开始</span><span class="token keyword">while</span> <span class="token boolean">True</span><span class="token punctuation">:</span> <span class="token keyword">if</span> button_black<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">0</span><span class="token punctuation">:</span> <span class="token comment"># 按下按钮,值为0</span> led_red<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span> led_green<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> led_blue<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> utime<span class="token punctuation">.</span>sleep<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span> led_red<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> led_green<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span> led_blue<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> utime<span class="token punctuation">.</span>sleep<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span> led_red<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> led_green<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> led_blue<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span> led_red<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span>led_green<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span>led_blue<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h1 id="7-模拟输入:"><a href="#7-模拟输入:" class="headerlink" title="7.模拟输入:"></a>7.模拟输入:</h1><p><img src="https://img-blog.csdnimg.cn/b1b576fd6bfc4c32b4884ce56c90f7ea.png" alt="![[Pasted image 20220920232711.png]]"></p><ul><li>3个内部模数转换器</li><li>12位adc</li><li>模拟基准电压源 模拟接地引脚 可与外部基准电压源配合使用</li></ul><p>最简单组件是有效直径</p><p>这里使用10k的直线壶</p><ul><li>引脚23 连接到patometer的一端</li><li>引脚31 gpio26 模拟转换器0 连接到patometer的一端</li><li>引脚36 3.3v输出 连接到patometer的一端</li></ul><p>代码</p><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">import</span> machine<span class="token keyword">import</span> utime<span class="token comment"># 定义一个称为电位计的变量,并将其定义为模拟输入,然后使用库的ADC功能</span>potentiometer <span class="token operator">=</span> machine<span class="token punctuation">.</span>ADC<span class="token punctuation">(</span><span class="token number">26</span><span class="token punctuation">)</span><span class="token keyword">while</span> <span class="token boolean">True</span><span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span>potentiometer<span class="token punctuation">.</span>read_u16<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 打印电位值,打印模数转换器的输出值</span> <span class="token comment"># 使用的是读出无符号16位输出,16位实际从0到65535</span> <span class="token comment"># 但是返回的值可能不是你期待的值</span> <span class="token comment"># 当我们需要将其传递给其它操作时</span> <span class="token comment"># 例如当我们使用PWM时,只要我们将所有内容</span> <span class="token comment"># 保持为无符号的16位数字,就不需要担心映射命令之类的</span> <span class="token comment"># 事情</span> utime<span class="token punctuation">.</span>sleep<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h1 id="8-PWM-Control"><a href="#8-PWM-Control" class="headerlink" title="8.PWM Control"></a>8.PWM Control</h1><p>从电位器中读取值用作PWM信号的控制<br>把信号馈送到rgbled的红色部分</p><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">import</span> machine<span class="token keyword">import</span> utimeled_red <span class="token operator">=</span> machine<span class="token punctuation">.</span>PWM<span class="token punctuation">(</span>machine<span class="token punctuation">.</span>Pin<span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 定于led为PWM输出</span>potentiomemter <span class="token operator">=</span> machine<span class="token punctuation">.</span>ADC<span class="token punctuation">(</span><span class="token number">26</span><span class="token punctuation">)</span> <span class="token comment"># 定义一个称为电位计的变量,并将其定义为模拟输入,然后使用库的ADC功能</span>led_red<span class="token punctuation">.</span>freq<span class="token punctuation">(</span><span class="token number">1000</span><span class="token punctuation">)</span> <span class="token comment"># 工作频率为1000赫兹</span><span class="token keyword">while</span> <span class="token boolean">True</span><span class="token punctuation">:</span> led_red<span class="token punctuation">.</span>duty_u16<span class="token punctuation">(</span>potentiomemter<span class="token punctuation">.</span>read_u16<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 占空比是一个无符号的16位整数</span> <span class="token comment"># 其值是从读取电位器中的无符号的16位整数中获得的</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h1 id="9-OLED"><a href="#9-OLED" class="headerlink" title="9.OLED"></a>9.OLED</h1><ul><li>PICO内部I2c总线零号</li><li>两个I2C总线</li><li>只需要写入</li><li>只需3.3v</li></ul><p><img src="https://img-blog.csdnimg.cn/42e7372086f44ebca26fc36391a279cd.png" alt="![[Pasted image 20220921004505.png]]"></p><p>驱动显示器的脚本:</p><p>需要导入这个oled 的库</p><p>进入工具的包管理下载对应的包<br><img src="https://img-blog.csdnimg.cn/44e4ab2856124f779afc77c82db293cd.png" alt="![[Pasted image 20220921005140.png]]"></p><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">import</span> machine<span class="token keyword">import</span> utimesda <span class="token operator">=</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">(</span><span class="token number">20</span><span class="token punctuation">)</span>scl <span class="token operator">=</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">(</span><span class="token number">21</span><span class="token punctuation">)</span>i2c <span class="token operator">=</span> machine<span class="token punctuation">.</span>I2C<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> sda <span class="token operator">=</span> sda<span class="token punctuation">,</span> scl <span class="token operator">=</span> scl<span class="token punctuation">,</span> freq <span class="token operator">=</span> <span class="token number">400000</span><span class="token punctuation">)</span> <span class="token comment"># 设置I2C对象,(使用哪个总线0还是1,赋值,i2c所在总线的频率 )</span><span class="token comment"># 使用库</span><span class="token keyword">from</span> ssd1306 <span class="token keyword">import</span> SSD1306_I2Coled <span class="token operator">=</span> SSD1306_I2C<span class="token punctuation">(</span><span class="token number">128</span><span class="token punctuation">,</span> <span class="token number">32</span><span class="token punctuation">,</span> i2c<span class="token punctuation">)</span> <span class="token comment"># 不用给ssd1306分配i2c,因为这是一个固定的地址,内置在库中,不同的显示参数</span><span class="token comment"># 在屏幕上打印出文本</span>oled<span class="token punctuation">.</span>text<span class="token punctuation">(</span><span class="token string">'Welcome to the'</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span>oled<span class="token punctuation">.</span>text<span class="token punctuation">(</span><span class="token string">'Pi Pico'</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">)</span>oled<span class="token punctuation">.</span>text<span class="token punctuation">(</span><span class="token string">'Display Demo'</span><span class="token punctuation">,</span> <span class="token number">0</span> <span class="token punctuation">,</span><span class="token number">20</span><span class="token punctuation">)</span>oled<span class="token punctuation">.</span>show<span class="token punctuation">(</span><span class="token punctuation">)</span>utime<span class="token punctuation">.</span>sleep<span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">)</span> oled<span class="token punctuation">.</span>fill<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span> <span class="token comment"># 填满显示屏</span>oled<span class="token punctuation">.</span>show<span class="token punctuation">(</span><span class="token punctuation">)</span>utime<span class="token punctuation">.</span>sleep<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span>oled<span class="token punctuation">.</span>fill<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> <span class="token comment"># 清空显示屏</span>oled<span class="token punctuation">.</span>show<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token comment"># 循环滚动</span><span class="token keyword">while</span> <span class="token boolean">True</span><span class="token punctuation">:</span> oled<span class="token punctuation">.</span>text<span class="token punctuation">(</span><span class="token string">"Hello World"</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token keyword">for</span> i <span class="token keyword">in</span> <span class="token builtin">range</span> <span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span><span class="token number">164</span><span class="token punctuation">)</span><span class="token punctuation">:</span> oled<span class="token punctuation">.</span>sroll<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token comment">#滚动一次只移动一个像素</span> oled<span class="token punctuation">.</span>show<span class="token punctuation">(</span><span class="token punctuation">)</span> utime<span class="token punctuation">.</span>sleep<span class="token punctuation">(</span><span class="token number">0.01</span><span class="token punctuation">)</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h1 id="10-H桥控制器小型直流电机"><a href="#10-H桥控制器小型直流电机" class="headerlink" title="10.H桥控制器小型直流电机"></a>10.H桥控制器小型直流电机</h1><p><img src="https://img-blog.csdnimg.cn/378a0b5675184150857f293f7af7ab99.png" alt="![[Pasted image 20220921011209.png]]"></p><ul><li>gpio上的PWM调制脉冲来控制直流电机的速度</li><li>使用MOSFET 的H桥驱动器</li></ul><p><img src="https://img-blog.csdnimg.cn/2554536940b54e2ba6b178ccb0ad2529.png" alt="![[Pasted image 20220921011512.png]]"></p><p>ADC电机 6v<br>tb 6612 fng 8桥电机驱动器 双批次桥, 但是只使用一面<br>6v 的电源</p><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">import</span> machine<span class="token keyword">import</span> utime<span class="token comment"># 设置电位计,作为模拟1到数字输入</span>potentiometer <span class="token operator">=</span> machine<span class="token punctuation">.</span>ADC<span class="token punctuation">(</span><span class="token number">26</span><span class="token punctuation">)</span><span class="token comment"># 设置H桥控制器引脚</span><span class="token comment"># AI1,2控制电机的旋转方向</span><span class="token comment"># PWMa控制马达的速度</span>mtr_AI1 <span class="token operator">=</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">(</span><span class="token number">8</span><span class="token punctuation">,</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">.</span>OUT<span class="token punctuation">)</span>mtr_AI2 <span class="token operator">=</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">(</span><span class="token number">7</span><span class="token punctuation">,</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">.</span>OUT<span class="token punctuation">)</span>mtr_PWMa <span class="token operator">=</span> machine<span class="token punctuation">.</span>PWM<span class="token punctuation">(</span>machine<span class="token punctuation">.</span>Pin<span class="token punctuation">(</span><span class="token number">6</span><span class="token punctuation">)</span><span class="token punctuation">)</span>button_red <span class="token operator">=</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">(</span><span class="token number">15</span><span class="token punctuation">,</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">.</span>IN<span class="token punctuation">,</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">.</span>PULL_DOWN<span class="token punctuation">)</span> <span class="token comment"># 红色按钮下拉电阻</span>button_black <span class="token operator">=</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">.</span>IN<span class="token punctuation">,</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">.</span>PULL_UP<span class="token punctuation">)</span> <span class="token comment"># 黑色按钮上拉电阻</span>led_red <span class="token operator">=</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">.</span>OUT<span class="token punctuation">)</span>led_green <span class="token operator">=</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">(</span><span class="token number">11</span><span class="token punctuation">,</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">.</span>OUT<span class="token punctuation">)</span>led_blue <span class="token operator">=</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">(</span><span class="token number">14</span><span class="token punctuation">,</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">.</span>OUT<span class="token punctuation">)</span>led_red<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span>led_green<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span>led_blue<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span>mtr_PWMa<span class="token punctuation">.</span>freq<span class="token punctuation">(</span><span class="token number">50</span><span class="token punctuation">)</span> <span class="token comment">#输入的PWM频率1设置为50赫兹,猜测</span>mtr_AI1<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span> <span class="token comment"># 让马达以特定的方向旋转</span>mtr_AI1<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token keyword">while</span> <span class="token boolean">True</span><span class="token punctuation">:</span><span class="token comment"># 当驱动LED时我们采用的是PWM的占空比,并将其与电位计的读数相匹配</span> mtr_PWMa<span class="token punctuation">.</span>duty_u16<span class="token punctuation">(</span>potentiometer<span class="token punctuation">.</span>read_u16<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">if</span> button_red<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">1</span><span class="token punctuation">:</span> mtr_AI1<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> mtr_AI2<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span> led_red<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span> led_green<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> led_blue<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> <span class="token keyword">if</span> button_black<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">0</span><span class="token punctuation">:</span> mtr_AI1<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span> mtr_AI2<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> led_red<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> led_green<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span> led_blue<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> utime<span class="token punctuation">.</span>sleep<span class="token punctuation">(</span><span class="token number">0.25</span><span class="token punctuation">)</span> <span class="token comment"># 防反跳按钮</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h1 id="11-用上全部"><a href="#11-用上全部" class="headerlink" title="11.用上全部"></a>11.用上全部</h1><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">import</span> machine<span class="token keyword">import</span> utime<span class="token comment"># 设置电位计,作为模拟1到数字输入</span>potentiometer <span class="token operator">=</span> machine<span class="token punctuation">.</span>ADC<span class="token punctuation">(</span><span class="token number">26</span><span class="token punctuation">)</span><span class="token comment"># 设置H桥控制器引脚</span><span class="token comment"># AI1,2控制电机的旋转方向</span><span class="token comment"># PWMa控制马达的速度</span>mtr_AI1 <span class="token operator">=</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">(</span><span class="token number">8</span><span class="token punctuation">,</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">.</span>OUT<span class="token punctuation">)</span>mtr_AI2 <span class="token operator">=</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">(</span><span class="token number">7</span><span class="token punctuation">,</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">.</span>OUT<span class="token punctuation">)</span>mtr_PWMa <span class="token operator">=</span> machine<span class="token punctuation">.</span>PWM<span class="token punctuation">(</span>machine<span class="token punctuation">.</span>Pin<span class="token punctuation">(</span><span class="token number">6</span><span class="token punctuation">)</span><span class="token punctuation">)</span>button_red <span class="token operator">=</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">(</span><span class="token number">15</span><span class="token punctuation">,</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">.</span>IN<span class="token punctuation">,</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">.</span>PULL_DOWN<span class="token punctuation">)</span> <span class="token comment"># 红色按钮下拉电阻</span>button_black <span class="token operator">=</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">.</span>IN<span class="token punctuation">,</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">.</span>PULL_UP<span class="token punctuation">)</span> <span class="token comment"># 黑色按钮上拉电阻</span>led_red <span class="token operator">=</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">.</span>OUT<span class="token punctuation">)</span>led_green <span class="token operator">=</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">(</span><span class="token number">11</span><span class="token punctuation">,</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">.</span>OUT<span class="token punctuation">)</span>led_blue <span class="token operator">=</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">(</span><span class="token number">14</span><span class="token punctuation">,</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">.</span>OUT<span class="token punctuation">)</span>sda <span class="token operator">=</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">(</span><span class="token number">20</span><span class="token punctuation">)</span>scl <span class="token operator">=</span> machine<span class="token punctuation">.</span>Pin<span class="token punctuation">(</span><span class="token number">21</span><span class="token punctuation">)</span>i2c <span class="token operator">=</span> machine<span class="token punctuation">.</span>I2C<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> sda <span class="token operator">=</span> sda<span class="token punctuation">,</span> scl <span class="token operator">=</span> scl<span class="token punctuation">,</span> freq <span class="token operator">=</span> <span class="token number">400000</span><span class="token punctuation">)</span> <span class="token comment"># 设置I2C对象,(使用哪个总线0还是1,赋值,i2c所在总线的频率 )</span><span class="token comment"># 使用库</span><span class="token keyword">from</span> ssd1306 <span class="token keyword">import</span> SSD1306_I2Coled <span class="token operator">=</span> SSD1306_I2C<span class="token punctuation">(</span><span class="token number">128</span><span class="token punctuation">,</span> <span class="token number">32</span><span class="token punctuation">,</span> i2c<span class="token punctuation">)</span> <span class="token comment"># 不用给ssd1306分配i2c,因为这是一个固定的地址,内置在库中,不同的显示参数</span>oled<span class="token punctuation">.</span>text<span class="token punctuation">(</span><span class="token string">'Pico Motor Test'</span><span class="token punctuation">,</span> <span class="token number">0</span> <span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">)</span>oled<span class="token punctuation">.</span>show<span class="token punctuation">(</span><span class="token punctuation">)</span>utime<span class="token punctuation">.</span>sleep<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span> led_red<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span>led_green<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span>led_blue<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span>utime<span class="token punctuation">.</span>sleep<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span>led_red<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span>led_green<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span>led_blue<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span>utime<span class="token punctuation">.</span>sleep<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span>led_red<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span>led_green<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span>led_blue<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token comment"># 设置电机频率的值</span>mtr_PWMa<span class="token punctuation">.</span>freq<span class="token punctuation">(</span><span class="token number">50</span><span class="token punctuation">)</span> <span class="token comment">#输入的PWM频率1设置为50赫兹,猜测</span>mtr_AI1<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span> <span class="token comment"># 让马达以特定的方向旋转</span>mtr_AI1<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token keyword">while</span> <span class="token boolean">True</span><span class="token punctuation">:</span><span class="token comment"># 500计算速度值,在oled上创建条形图</span> speedvalue <span class="token operator">=</span> <span class="token builtin">int</span><span class="token punctuation">(</span>potentiometer<span class="token punctuation">.</span>read_u16<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">/</span><span class="token number">500</span><span class="token punctuation">)</span><span class="token comment"># 当驱动LED时我们采用的是PWM的占空比,并将其与电位计的读数相匹配</span> mtr_PWMa<span class="token punctuation">.</span>duty_u16<span class="token punctuation">(</span>potentiometer<span class="token punctuation">.</span>read_u16<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">if</span> button_red<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">1</span><span class="token punctuation">:</span> mtr_AI1<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> mtr_AI2<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span> led_red<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span> led_green<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> led_blue<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> <span class="token keyword">if</span> button_black<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">0</span><span class="token punctuation">:</span> mtr_AI1<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span> mtr_AI2<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> led_red<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> led_green<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span> led_blue<span class="token punctuation">.</span>value<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> oled<span class="token punctuation">.</span>fill_rect<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">15</span><span class="token punctuation">,</span> speedvalue<span class="token punctuation">,</span> <span class="token number">25</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token comment"># oled上创建一个矩形,1,15经常启动的位置,速度值,25用来确定长度</span> <span class="token comment"># 11展示出来1</span>oled<span class="token punctuation">.</span>show<span class="token punctuation">(</span><span class="token punctuation">)</span>oled<span class="token punctuation">.</span>fill_rect<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">15</span><span class="token punctuation">,</span> speedvalue<span class="token punctuation">,</span> <span class="token number">25</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token comment"># </span>utime<span class="token punctuation">.</span>sleep<span class="token punctuation">(</span><span class="token number">0.25</span><span class="token punctuation">)</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><a href="https://www.bilibili.com/video/BV1tr4y1N7pv/?vd_source=ee1eea60088211b9fa51cf93a31423da">视频教程</a></p>]]></content>
<summary type="html"><p><a href="https://pico.org.cn/">树莓派 Pico 中文站</a></p>
<h1 id="1-板子介绍"><a href="#1-板子介绍" class="headerlink" title="1.板子介绍"></a>1.板子介绍</h1><p</summary>
<category term="树莓派" scheme="https://yyzqlqc.github.io/categories/%E6%A0%91%E8%8E%93%E6%B4%BE/"/>
</entry>
<entry>
<title>保姆级Obsidian学习教程【超完整,小白必备】</title>
<link href="https://yyzqlqc.github.io/post/27fb5d91.html"/>
<id>https://yyzqlqc.github.io/post/27fb5d91.html</id>
<published>2022-12-26T16:16:02.572Z</published>
<updated>2022-12-26T16:16:02.576Z</updated>
<content type="html"><![CDATA[<h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><ul><li>本篇文章学习视频来源: <a href="https://www.bilibili.com/video/BV1MF411W7eD/?spm_id_from=333.788&vd_source=ee1eea60088211b9fa51cf93a31423da">沙牛obsidian优质课程</a></li><li>学 习 软 件: <a href="https://obsidian.md/">obsidian</a></li><li>课 程 对 应 资 源: <a href="https://pan.sandox.top/s/O3pIW?path=/">云盘资源</a></li><li>说 明: Obsidian是基于<strong>Markdown文件</strong>的<strong>本地</strong>知识管理软件,并且开发者承诺Obsidian对于个人使用者<strong>永久免费</strong>。不同于云端笔记,ob在本地以文件夹的数据保存方式,更利于保存笔记,防止在云端的笔记丢失的情况,双链和丰富的插件功能能助使用者构建庞大的知识网络体系。</li></ul><hr><h1 id="学习网站:"><a href="#学习网站:" class="headerlink" title="学习网站:"></a>学习网站:</h1><blockquote><p><a href="https://github.com/Jackiexiao/obsidian">obsidian中文帮助手册</a></p></blockquote><blockquote><p><a href="https://help.obsidian.md/Advanced+topics/Community+plugins">官网帮助手册</a></p></blockquote><blockquote><p><a href="https://www.zybuluo.com/codeep/note/163962">Cmd Markdown 公式指导手册</a></p></blockquote><blockquote><p><a href="https://forum-zh.obsidian.md/">ob中文论坛</a></p></blockquote><hr><h1 id="笔记目录"><a href="#笔记目录" class="headerlink" title="笔记目录"></a>笔记目录</h1><ul><li><a href="https://blog.csdn.net/weixin_51684355/article/details/126064886?spm=1001.2014.3001.5502">Obsidian学习从0到1 —— 基本介绍</a></li><li><a href="https://editor.csdn.net/md/?articleId=126064933">Obsidian学习从0到1 —— MARKDOWN</a></li><li><a href="https://blog.csdn.net/weixin_51684355/article/details/126084867?spm=1001.2014.3001.5502">Obsidian学习从0到1 —— 双链(重点)</a></li><li><a href="https://editor.csdn.net/md/?articleId=126086160">Obsidian学习从0到1 —— 使用技巧</a></li><li><a href="https://blog.csdn.net/weixin_51684355/article/details/126089616?spm=1001.2014.3001.5502">Obsidian学习从0到1 —— 插件(上)</a></li><li><a href="https://blog.csdn.net/weixin_51684355/article/details/126089632?spm=1001.2014.3001.5502">Obsidian学习从0到1 —— 插件(下)</a></li><li><a href="https://blog.csdn.net/weixin_51684355/article/details/126091340?spm=1001.2014.3001.5502">Obsidian学习从0到1 —— 搜索和查询</a></li><li><a href="https://blog.csdn.net/weixin_51684355/article/details/126092705?spm=1001.2014.3001.5502">Obsidian学习从0到1 —— Dataview</a></li></ul><p>随视频课程持续更新……………<br>感谢支持</p>]]></content>
<summary type="html"><h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><ul>
<li>本篇文章学习视频来源: <a href="https://www.bilibili.com/video/</summary>
<category term="Obsidian" scheme="https://yyzqlqc.github.io/categories/Obsidian/"/>
<category term="工具教程" scheme="https://yyzqlqc.github.io/tags/%E5%B7%A5%E5%85%B7%E6%95%99%E7%A8%8B/"/>
</entry>
<entry>
<title>C语言操作符【超全面归纳解析】</title>
<link href="https://yyzqlqc.github.io/post/d66e415b.html"/>
<id>https://yyzqlqc.github.io/post/d66e415b.html</id>
<published>2022-12-25T16:56:29.035Z</published>
<updated>2022-12-25T16:56:29.123Z</updated>
<content type="html"><![CDATA[<h1 id="1-算数操作符"><a href="#1-算数操作符" class="headerlink" title="1.算数操作符"></a>1.算数操作符</h1><p><img src="https://img-blog.csdnimg.cn/36b1ae3e921c4b888e39d564c636df72.png"></p><pre class="line-numbers language-none"><code class="language-none"> + - */%// 加 减 乘 除 取余<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><blockquote><p>1.除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数<br> 2.对于 / 操作符如果两个操作数都为整数,执行整数除法(求商舍余)。而只要有浮点数,执行的就是浮点数除法。<br> 3.% (取模)操作符的两个操作数必须为整数,若其中一个不为整数则报错,返回的是整除之后的余数。</p></blockquote><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string"><stdio.h></span></span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token keyword">int</span> a <span class="token operator">=</span> <span class="token number">5</span><span class="token punctuation">;</span><span class="token keyword">int</span> b <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">;</span><span class="token keyword">int</span> c <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"a+b = %d\n"</span><span class="token punctuation">,</span> a <span class="token operator">+</span> b<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//相加</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"a-b = %d\n"</span><span class="token punctuation">,</span> a <span class="token operator">-</span> b<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//相减</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"a*b = %d\n"</span><span class="token punctuation">,</span> a <span class="token operator">*</span> b<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//相乘</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"a/b = %d\n"</span><span class="token punctuation">,</span> a <span class="token operator">/</span> b<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//求商</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"a%%b = %d\n"</span><span class="token punctuation">,</span> a <span class="token operator">%</span> b<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//取模</span><span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><img src="https://img-blog.csdnimg.cn/d864b2b7cb4144d98eb868a90297ddc3.png"></p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><stdio.h></span></span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token comment">/*double a = 5.0 / 2;*/</span><span class="token keyword">double</span> a <span class="token operator">=</span> <span class="token number">5</span> <span class="token operator">%</span> <span class="token number">2.0</span><span class="token punctuation">;</span><span class="token comment">//报错</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"a = %lf"</span><span class="token punctuation">,</span> a<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h1 id="2-移位操作符"><a href="#2-移位操作符" class="headerlink" title="2.移位操作符"></a>2.移位操作符</h1><p><img src="https://img-blog.csdnimg.cn/3fbc411b150e4001936cde6e9d77cfd4.png"></p><pre><code>>> <<</code></pre><p>//右移 左移</p><blockquote><p>移位操作符可分为 算术移位 和 逻辑移位<br>算术移位: 先移位,然后补足符号位 (通常是这个)<br>逻辑移位: 直接移位,0补齐</p></blockquote><blockquote><p>总结:<br>1.左移移动一位正数相当于直接乘以2,负数也一样,移动n位,乘以2 ^ n。<br>2.左位移一位 *2,右位移一位 /2 (-1右位移还是-1)</p></blockquote><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><stdio.h></span></span><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><windows.h></span></span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token keyword">int</span> a <span class="token operator">=</span> <span class="token number">16</span><span class="token punctuation">;</span><span class="token keyword">int</span> b <span class="token operator">=</span> a <span class="token operator"><<</span> <span class="token number">1</span><span class="token punctuation">;</span><span class="token keyword">int</span> c <span class="token operator">=</span> a <span class="token operator">>></span> <span class="token number">2</span><span class="token punctuation">;</span><span class="token comment">//>>整数移位,移动的是二进制</span><span class="token comment">//0000 0000 0000 0000 0000 0000 0001 0000 </span><span class="token keyword">int</span> d <span class="token operator">=</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span><span class="token keyword">int</span> e <span class="token operator">=</span> d <span class="token operator">>></span> <span class="token number">1</span><span class="token punctuation">;</span><span class="token comment">//在计算机中,数据是用补码存储的</span><span class="token comment">//移位运算符操作的是补码</span><span class="token comment">//-1的补码:</span> <span class="token comment">//1111 1111 1111 1111 1111 1111 1111 1111</span> <span class="token comment">//移位后-1的二进制码不变</span> <span class="token comment">//1111 1111 1111 1111 1111 1111 1111 1111 1</span> <span class="token comment">//算数位移补符号位</span> <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> b<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//输出结果为32</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> c<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//输出结果为4</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> e<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//输出结果仍为-1,移位后-1的二进制码不变</span><span class="token function">system</span><span class="token punctuation">(</span><span class="token string">"Pause"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><img src="https://img-blog.csdnimg.cn/4bd9ab5f185b4fa5842dc465ca7014e1.png" alt="在这里插入图片描述"></p><blockquote><p>右移是以算术移位 的方式来进行右移的</p></blockquote><p>例如:<br><img src="https://img-blog.csdnimg.cn/c4cca5c2edee4d39a28160e0dd8707b7.png" alt="在这里插入图片描述"></p><p>我们先按照算术移位的方式去推导最终结果,然后再修改变量大小成 - 16进行验证。</p><p>警告:</p><blockquote><p>1.移位操作符只能作用于整数,不能用于浮点数,因为浮点数的存储方式跟整数完全不同<br> 2.对于移位运算符,不要移动负数位,这个是标准未定义的。<br>eg: int num = 10;<br>num >> -1;//error</p></blockquote><h1 id="3-位操作符"><a href="#3-位操作符" class="headerlink" title="3.位操作符"></a>3.位操作符</h1><table><thead><tr><th>C语言运算符表示</th><th>含义</th><th>示例</th></tr></thead><tbody><tr><td>&</td><td>位与</td><td>x & y</td></tr><tr><td></td><td></td><td>位或</td></tr><tr><td>^</td><td>异或</td><td>x ^ y</td></tr><tr><td>~</td><td>按位取反</td><td>x ~ y</td></tr></tbody></table><p>& (按位与) 二进制补码 两真才真(1) 一假则假(0)<br>| (按位或) 二进制补码 一真则真(1) 两假才假(0)<br>^ (按位异或) 二进制补码 相异为真(1) 相同为假 (0)</p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string"><stdio.h></span></span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token keyword">int</span> a <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">;</span> <span class="token comment">//00000000 00000000 00000000 00000011</span><span class="token keyword">int</span> b <span class="token operator">=</span> <span class="token number">5</span><span class="token punctuation">;</span> <span class="token comment">//00000000 00000000 00000000 00000101</span> <span class="token keyword">int</span> c1 <span class="token operator">=</span> a <span class="token operator">&</span> b<span class="token punctuation">;</span> <span class="token comment">//00000000 00000000 00000000 00000001 =1</span><span class="token keyword">int</span> c2 <span class="token operator">=</span> a <span class="token operator">|</span> b<span class="token punctuation">;</span> <span class="token comment">//00000000 00000000 00000000 00000111 =7</span><span class="token keyword">int</span> c3 <span class="token operator">=</span> a <span class="token operator">^</span> b<span class="token punctuation">;</span> <span class="token comment">//00000000 00000000 00000000 00000110 =6</span> <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"c1 = %d\n"</span><span class="token punctuation">,</span> c1<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"c2 = %d\n"</span><span class="token punctuation">,</span> c2<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"c3 = %d\n"</span><span class="token punctuation">,</span> c3<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><img src="https://img-blog.csdnimg.cn/9d956775963d47d3815f8c66e8a8d173.png" alt="在这里插入图片描述"></p><p><strong>练习1:不用临时变量,交换a,b的值</strong></p><blockquote><p>不用临时变量,交换a,b的值</p></blockquote><p>假设我们给定两个数,a = 3, b = 5;</p><p>要实现两个数的交换,我们会想到醋和酱油交换的生活案例,我们会先找一个空瓶子,先将醋或者酱油倒到空瓶子中,(假设将醋先倒入空瓶子中)然后我们会将酱油倒入原醋瓶中,将原空瓶中的醋倒入酱油瓶中。<br>方法①根据这种方式,我们会先创建一个临时变量来用于两者的数值交换</p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><stdio.h></span></span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token keyword">int</span> a <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">;</span><span class="token keyword">int</span> b <span class="token operator">=</span> <span class="token number">5</span><span class="token punctuation">;</span><span class="token keyword">int</span> temp <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"before:a = %d,b = %d\n"</span><span class="token punctuation">,</span> a<span class="token punctuation">,</span> b<span class="token punctuation">)</span><span class="token punctuation">;</span>temp <span class="token operator">=</span> a<span class="token punctuation">;</span>a <span class="token operator">=</span> b<span class="token punctuation">;</span>b <span class="token operator">=</span> temp<span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"after:a = %d,b = %d"</span><span class="token punctuation">,</span> a<span class="token punctuation">,</span> b<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>但是我们题目中明确要求不能创建变量,所以这种方式明显不合适。</p><p>这时候我们考虑另外一种方式,②从数学的角度出发:如果我先将 a与b之和放到a到当中 然后再用两者之和减去b不就得到a了吗,并把这个值赋给b,实现了a的值转移给b 。同理,用两者之和减去刚刚赋予a值到b中的b,就能得到原b的值(听起来有点绕是不,简单来说:就是 值:a + b - a = b = > 变量a</p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token comment">//方法一:加减法</span><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string"><stdio.h></span></span><span class="token comment">//不创建临时变量实现两个数的交换</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token keyword">int</span> a <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">;</span><span class="token keyword">int</span> b <span class="token operator">=</span> <span class="token number">5</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"before:a = %d,b = %d\n"</span><span class="token punctuation">,</span> a<span class="token punctuation">,</span> b<span class="token punctuation">)</span><span class="token punctuation">;</span>a <span class="token operator">=</span> a <span class="token operator">+</span> b<span class="token punctuation">;</span>b <span class="token operator">=</span> a <span class="token operator">-</span> b<span class="token punctuation">;</span><span class="token comment">//将a的值给b</span>a <span class="token operator">=</span> a <span class="token operator">-</span> b<span class="token punctuation">;</span><span class="token comment">//将b的值给a</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"after:a = %d,b = %d"</span><span class="token punctuation">,</span> a<span class="token punctuation">,</span> b<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><img src="https://img-blog.csdnimg.cn/63e07a03c34c4c7c8d441e1ae9f10f61.png" alt="在这里插入图片描述"></p><p>虽然上面说的这种方式实现了不用创建临时变量就交换两个数值,但是仍然存在一定的缺陷,比如我们的变量a, b并不等于3和5,而是一个很大或者离int边界阈值很接近的值,如果我们用两者相加的方法,a + b很有可能就超出int类型的边界阈值,得到一个并非我们想要的结果,再拿着这个结果去减去a或者b中一个数,并不能得到原本的另一个数的正确值。也就是存在“可能溢出”的缺陷。</p><p>③既然这种加减法因为阈值的问题存在缺陷,我们就要去考虑一种既能够成功交换两个数的值,还不会存在阈值的缺陷,更深层次的思考,数值的存储方式– - 二进制,二进制能实现两者交换……a thousand years later—>异或操作符 ^ 这种位操作符不会产生进位的情况,所以不存在溢出的可能。<img src="https://img-blog.csdnimg.cn/5307a9cf96a648d0afeb218a4ef889d3.png"></p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token comment">//异或办法</span><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string"><stdio.h></span></span><span class="token comment">//不创建临时变量实现两个数的交换</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token keyword">int</span> a <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">;</span><span class="token keyword">int</span> b <span class="token operator">=</span> <span class="token number">5</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"before:a = %d,b = %d\n"</span><span class="token punctuation">,</span> a<span class="token punctuation">,</span> b<span class="token punctuation">)</span><span class="token punctuation">;</span>a <span class="token operator">=</span> a <span class="token operator">^</span> b<span class="token punctuation">;</span>b <span class="token operator">=</span> a <span class="token operator">^</span> b<span class="token punctuation">;</span>a <span class="token operator">=</span> a <span class="token operator">^</span> b<span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"after:a = %d,b = %d"</span><span class="token punctuation">,</span> a<span class="token punctuation">,</span> b<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><img src="https://img-blog.csdnimg.cn/5307a9cf96a648d0afeb218a4ef889d3.png"></p><p><strong>练习2:求一个整数存储在内存中的二进制中1的个数</strong><br>编写代码实现:求一个整数存储在内存中的二进制中1的个数</p><p>方法①:看到这个问题,我们可以想到利用整数求其二进制原码,只要在求的过程中判断余数是否为1,是就计数 + 1,根据这种想法,编写我的代码可以得到:</p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string"><stdio.h></span></span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token keyword">int</span> a <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token keyword">int</span> count <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span> <span class="token operator">&</span>a<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">while</span> <span class="token punctuation">(</span>a<span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token punctuation">(</span>a <span class="token operator">%</span> <span class="token number">2</span><span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">1</span><span class="token punctuation">)</span>count<span class="token operator">++</span><span class="token punctuation">;</span> a <span class="token operator">=</span> a <span class="token operator">/</span> <span class="token number">2</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"count = %d\n"</span><span class="token punctuation">,</span> count<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><img src="https://img-blog.csdnimg.cn/21841e1477124f3fa47a09eee6e8a367.png" alt="在这里插入图片描述"></p><p>这种方式看似正确,但是当我们输入负数的时候,比如 - 1, - 1补码为11111111 11111111 11111111 11111111 正确答案应该为:32 ,而我们程序运行却得到0。<br>(实际上这种方式还有补救方法,只要将 负数看作无符号位的整型,将a定义从 int a = 0; 成更改成<strong>unsigned int a - 1就会被当作一个超级大的数字11111111 11111111 11111111 11111111 来处理)</strong><br><img src="https://img-blog.csdnimg.cn/96c29bd9c9a14fbd91b3459bd55ddbd7.png" alt="在这里插入图片描述"></p><p>方法②:既然这种方法不可行,我们就应该换一种思路,寻找新的方法,比如我能否得到输入数字存储的二进制补码,然后统计该补码中1的个数?答案是:可以,我们应该要想到任何一个数如果和 1进行按位与操作,若其最后一位数为1,则结果为1,若为0,结果为0。再借助移位操作符右移便可以统计1的个数(int类型的大小 为32位bit),因此可以编写代码为:</p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string"><stdio.h></span></span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token keyword">int</span> a <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token keyword">int</span> count <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span> <span class="token operator">&</span>a<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">for</span> <span class="token punctuation">(</span>i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator"><</span> <span class="token number">32</span><span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">==</span> <span class="token punctuation">(</span><span class="token punctuation">(</span>a <span class="token operator">>></span> i<span class="token punctuation">)</span> <span class="token operator">&</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>count<span class="token operator">++</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"count = %d\n"</span><span class="token punctuation">,</span> count<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>这里我们的判断条件是:<br><strong>if(1 == ((a >> i) & 1))</strong></p><p>也就是将上面的1进行左移操作,然后将两者进行按位与操作,再比较1左移操作的结果 与按位与之后的结果是否相等,若相等,代表该二进制位置 为 1</p><p>方法③:通过对输入数字的二进制操作,从最后一位1开始,每一步减少一个1</p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string"><stdio.h></span></span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token keyword">int</span> a <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token keyword">int</span> count <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span> <span class="token operator">&</span>a<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">while</span> <span class="token punctuation">(</span>a<span class="token punctuation">)</span><span class="token punctuation">{</span>count<span class="token operator">++</span><span class="token punctuation">;</span>a <span class="token operator">&=</span> a <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">;</span><span class="token comment">//a = a & (a - 1);</span><span class="token punctuation">}</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"count = %d\n"</span><span class="token punctuation">,</span> count<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>a - 1能够让a的最后一位变成0 这种奇妙的感觉就像是三体小说中描写的“高维世界像低维世界塌陷”<br>有这样的一个公式 n & (n - 1)<br>假设n = 13 其后四位二进制补码为 1101</p><blockquote><p>1101 —- n<br>1100 —- n - 1<br>1100 —- n = n & (n - 1)<br>1011 —- n - 1<br>1000 —- n = n & (n - 1)<br>0111 —- n - 1<br>0000 —- n = n & (n - 1)</p></blockquote><p>我们可以观察n的变化,发现每一次进行n = n & (n - 1)后,其最后一位的1(最右边的1)都会变成0(每执行一次,最右边的1都会消失,直到变成0,停止执行),那么在n变成0之前,n = n & (n - 1)能执行多少次,就代表最初的n中二进制补码就有多少个1。<br>这种算法的执行次数不用每次都执行32次,有多少个1,就执行多少次,所以效率很高!</p><blockquote><p>注意:位操作符在进行运算的时候,不需要考虑符号位的影响,所有位都当做需要参与运算的二进制位,<br> 比如 - 1 ^ -1 = 0, 即符号位也正常参与位操作符运算。</p></blockquote><p>4.复合赋值符</p><p><img src="https://img-blog.csdnimg.cn/829868b7c9d647c389e53f0cb6f1ea48.png" alt="在这里插入图片描述"></p><p>①<strong>简单赋值操作符:</strong></p><p>= 赋值操作符(注意:一个等号 = 表示赋值,两个等号 == 表示条件判断)<br>通过赋值操作符,我们可以给初始变量赋值,变更调整变量的值(也就是重新给变量赋值)<br>例如:</p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token keyword">int</span> weight <span class="token operator">=</span> <span class="token number">80</span><span class="token punctuation">;</span><span class="token comment">//单位kg </span>weight <span class="token operator">=</span> <span class="token number">60</span><span class="token punctuation">;</span><span class="token comment">//对80不满意,重新赋值成60</span><span class="token keyword">double</span> salary <span class="token operator">=</span> <span class="token number">10000.0</span><span class="token punctuation">;</span>salary <span class="token operator">=</span> <span class="token number">30000.0</span><span class="token punctuation">;</span><span class="token comment">//对salary只有10000.0不满意,变成30000.0</span><span class="token comment">//赋值操作符也可以连续使用,比如</span><span class="token keyword">int</span> a <span class="token operator">=</span> <span class="token number">10</span><span class="token punctuation">;</span><span class="token keyword">int</span> x <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token keyword">int</span> y <span class="token operator">=</span> <span class="token number">20</span><span class="token punctuation">;</span>a <span class="token operator">=</span> x <span class="token operator">=</span> y <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">;</span> <span class="token comment">//连续赋值 //赋值操作符是从右往左计算的</span><span class="token comment">//等同于:</span>x <span class="token operator">=</span> y <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">;</span>a <span class="token operator">=</span> x<span class="token punctuation">;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>一般我们都是用分开的形式,不用连续赋值的形式,因为分开表示的方法更加容易阅读和理解,且易于调试。</p><p>②<strong>复杂赋值操作符</strong></p><p>+= 、-= 、 *= 、 /=、 %= 、 >>=、 <<=、 &=、 |=、 ^=<br>举例:<br>int x = 10;<br>x = x + 10;<br>等同于:x += 10;</p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string"><stdio.h></span></span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token keyword">int</span> a <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> a <span class="token operator">+=</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> a <span class="token operator">-=</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> a <span class="token operator">*=</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> a <span class="token operator">/=</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> a <span class="token operator">%=</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> a <span class="token operator"><<=</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> a <span class="token operator">>>=</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> a <span class="token operator">&=</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> a <span class="token operator">|=</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> a <span class="token operator">^=</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><img src="https://img-blog.csdnimg.cn/8d10e27e39fa44d2af8af9c70bf09ad8.png" alt="在这里插入图片描述"></p><h1 id="4-单目操作符"><a href="#4-单目操作符" class="headerlink" title="4.单目操作符"></a>4.单目操作符</h1><p><img src="https://img-blog.csdnimg.cn/54e1e137e76e4dbfa8e570bcaf58e116.png" alt="在这里插入图片描述"></p><p><strong>sizeof 详细讲解:</strong></p><p>举例一:</p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string"><stdio.h></span></span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token keyword">int</span> a <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span><span class="token comment">//一个整形为4的字节</span><span class="token keyword">char</span> b <span class="token operator">=</span> <span class="token char">'A'</span><span class="token punctuation">;</span><span class="token keyword">int</span> arr<span class="token punctuation">[</span><span class="token number">20</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">{</span> <span class="token number">0</span> <span class="token punctuation">}</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> <span class="token keyword">sizeof</span><span class="token punctuation">(</span>a<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> <span class="token keyword">sizeof</span> a<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> <span class="token keyword">sizeof</span><span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> <span class="token keyword">sizeof</span><span class="token punctuation">(</span>b<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> <span class="token keyword">sizeof</span><span class="token punctuation">(</span><span class="token keyword">char</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> <span class="token keyword">sizeof</span><span class="token punctuation">(</span>arr<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> <span class="token keyword">sizeof</span><span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">[</span><span class="token number">20</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><img src="https://img-blog.csdnimg.cn/44cb8cff7ecb4f7db9c394a6dec12cef.png" alt="在这里插入图片描述"></p><p>举例二:</p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string"><stdio.h></span></span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token keyword">short</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token keyword">int</span> j <span class="token operator">=</span> <span class="token number">10</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> <span class="token keyword">sizeof</span><span class="token punctuation">(</span>i <span class="token operator">=</span> j <span class="token operator">+</span> <span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//sizeof计算所占空间的大小</span><span class="token comment">//不管这里的j是什么类型 j+5的结果都是放到变量 i当中 而i又是short类型</span><span class="token comment">//sizeof(i=j+5)等于 sizeof(i)等于sizeof(short)等于2</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> i<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//sizeof里面放的表达式并不会真实进行运算,只是一个摆设</span><span class="token comment">//也就是说 i=j+5 这一步操作并未真实执行,所以i还是原来的值:0</span><span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><img src="https://img-blog.csdnimg.cn/73b8c32856df4059a5606a73146460b8.png" alt="在这里插入图片描述"></p><blockquote><p>注意:sizeof括号中的表达式不参与实际运算!</p></blockquote><p>~ 按位取反详解:<br>按二进制补码取反<br>例如 0:00000000 00000000 00000000 00000000<br>~0:11111111 11111111 11111111 11111111 补码 等于 - 1</p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string"><stdio.h></span></span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token keyword">int</span> a <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> <span class="token operator">~</span>a<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><img src="https://img-blog.csdnimg.cn/04f9f9272dd249769ad25c26ad21ee77.png" alt="在这里插入图片描述"></p><p>举例1:</p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string"><stdio.h></span></span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">11</span><span class="token punctuation">;</span><span class="token comment">//00000000 00000000 00000000 00001011 让倒数第三位变成1,其余不变</span><span class="token comment">//00000000 00000000 00000000 00000100 按位或 就能得到</span><span class="token comment">//1 << 2 1左移2位得到 00000000 00000000 00000000 00000100</span><span class="token comment">//int j = i | 4;</span><span class="token keyword">int</span> j <span class="token operator">=</span> i <span class="token operator">|</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator"><<</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> j<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//将j变成原来的i 只需要按位与操作</span><span class="token comment">//00000000 00000000 00000000 00001111</span><span class="token comment">//11111111 11111111 11111111 11111011</span><span class="token comment">//00000000 00000000 00000000 00001011</span><span class="token comment">//而 11111111 11111111 11111111 11111011 可以由按位取反得到</span><span class="token comment">// 00000000 00000000 00000000 00000100 这个数又可以通过1左移2位得到</span>j <span class="token operator">=</span> j <span class="token operator">&</span> <span class="token punctuation">(</span><span class="token operator">~</span><span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator"><<</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> j<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//int a = 0;</span><span class="token comment">//printf("%d\n", ~a);</span><span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><img src="https://img-blog.csdnimg.cn/4fc53ee7f23a44e2bf411326dcc2484f.png" alt="在这里插入图片描述"></p><p><strong>减减– 、 加加 ++ 详解:</strong></p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string"><stdio.h></span></span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token keyword">int</span> a <span class="token operator">=</span> <span class="token number">10</span><span class="token punctuation">;</span><span class="token comment">//printf("%d\n", ++a);//前置++,先++,后打印</span><span class="token comment">//printf("%d\n", a++);//后置++,先打印,后++</span><span class="token comment">//printf("%d\n", --a);//前置--,先--,后打印</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> a<span class="token operator">--</span><span class="token punctuation">)</span><span class="token punctuation">;</span>后置<span class="token operator">--</span><span class="token punctuation">,</span>先打印,后<span class="token operator">--</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> a<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><img src="https://img-blog.csdnimg.cn/65e0c40787b246b9a6a048059f54c06e.png" alt="在这里插入图片描述"></p><p><strong>(类型)强制类型转换详解:</strong></p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string"><stdio.h></span></span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token keyword">int</span> a <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">)</span><span class="token number">3.14</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> a<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><img src="https://img-blog.csdnimg.cn/047f807e760743219f847c220965c5d0.png" alt="在这里插入图片描述"></p><p>练习:</p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string"><stdio.h></span></span><span class="token keyword">void</span> <span class="token function">test1</span><span class="token punctuation">(</span><span class="token keyword">int</span> arr<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> <span class="token keyword">sizeof</span><span class="token punctuation">(</span>arr<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">void</span> <span class="token function">test2</span><span class="token punctuation">(</span><span class="token keyword">char</span> ch<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> <span class="token keyword">sizeof</span><span class="token punctuation">(</span>ch<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token keyword">int</span> arr<span class="token punctuation">[</span><span class="token number">10</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">{</span> <span class="token number">0</span> <span class="token punctuation">}</span><span class="token punctuation">;</span><span class="token keyword">char</span> ch<span class="token punctuation">[</span><span class="token number">10</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">{</span> <span class="token number">0</span> <span class="token punctuation">}</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> <span class="token keyword">sizeof</span><span class="token punctuation">(</span>arr<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> <span class="token keyword">sizeof</span><span class="token punctuation">(</span>ch<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">test1</span><span class="token punctuation">(</span>arr<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">test2</span><span class="token punctuation">(</span>ch<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><img src="https://img-blog.csdnimg.cn/f5b4a231c60742139f8ab1446beaf562.png" alt="在这里插入图片描述"></p><h1 id="5-关系操作符"><a href="#5-关系操作符" class="headerlink" title="5.关系操作符"></a>5.关系操作符</h1><p><img src="https://img-blog.csdnimg.cn/e0c508ce0eff450098d6e6b4857ba0f4.png" alt="在这里插入图片描述"></p><table><thead><tr><th>关系运算符释义</th><th>C语言表示</th><th>数学表示</th></tr></thead><tbody><tr><td>大于</td><td>></td><td>></td></tr><tr><td>大于等于</td><td>>=</td><td>≥</td></tr><tr><td>等于</td><td>==</td><td>=</td></tr><tr><td>不等于</td><td>!=</td><td>≠</td></tr><tr><td>小于</td><td><</td><td><</td></tr><tr><td>小于等于</td><td><=</td><td>≤</td></tr></tbody></table><p><strong>关系运算符的应用</strong></p><ul><li>关系运算符的运算结果只有 0 或 1。当条件成立时结果为 1,条件不成立结果为 0。</li><li>我们来看一段代码,如下:<pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><stdio.h></span></span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> <span class="token number">1</span> <span class="token operator">></span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> <span class="token number">1</span> <span class="token operator"><</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></li></ul><p>得到的输出结果为:</p><blockquote><p>0<br> 1</p></blockquote><blockquote><p>原因就是1 > 2在数学上是不成立的,所以结果为0;而1 < 2在数学上是不成立的,所以结果为1</p></blockquote><h1 id="6-逻辑操作符"><a href="#6-逻辑操作符" class="headerlink" title="6.逻辑操作符"></a>6.逻辑操作符</h1><blockquote><p>1.&& 逻辑与 判断规则:两真则真,一假就假<br> 2.|| 逻辑或 判断规则:一真则真,两假才假</p></blockquote><blockquote><p>详解:<br>位操作符中的 & 和 | 操作的是数的二进制补码 逻辑操作符中的 && 和 || 操作的是数本身 (数为0为假,数为非0为真)<br>使用逻辑操作符之后,若表达式整体判断为真,则值为1(1表示真,固定值) 若表达式整体判断为假,则值为0(0表示假,固定值)</p></blockquote><p>举例一:</p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string"><stdio.h></span></span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">,</span> a <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">,</span> b <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">,</span> c <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">,</span> d <span class="token operator">=</span> <span class="token number">4</span><span class="token punctuation">;</span>i <span class="token operator">=</span> a<span class="token operator">++</span> <span class="token operator">&&</span> <span class="token operator">++</span>b <span class="token operator">&&</span> d<span class="token operator">++</span><span class="token punctuation">;</span><span class="token comment">//a++ 先使用a的值0,再++, 判断a=0后,后面的 ++b && d++均不执行</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"a = %d\nb = %d\nc = %d\nd = %d\n"</span><span class="token punctuation">,</span> a<span class="token punctuation">,</span> b<span class="token punctuation">,</span> c<span class="token punctuation">,</span> d<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><img src="https://img-blog.csdnimg.cn/a2e2d687d84c46a19284909b4dc5233d.png" alt="在这里插入图片描述"></p><blockquote><p>总结:<br>逻辑与操作&& : 左边判断为假后,右边的表达式不再执行,直接停止,返回值0(假)<br>逻辑或操作 || 左边判断为真后,右边的表达式不再执行,直接停止,返回值1(真)</p></blockquote><h1 id="7-条件操作符"><a href="#7-条件操作符" class="headerlink" title="7.条件操作符"></a>7.条件操作符</h1><blockquote><p>exp1 ? exp2 : exp3</p></blockquote><blockquote><p>解释:表达式1进行判断,若结果为真,则 exp1 ? exp2 : exp3 整体的结果为 表达式 exp2 的结果<br> 若结果为假,则exp1 ? exp2 : exp3 整体的结果为 表达式 exp3 的结果<br> exp是expression的缩写,中文意思为“表达”</p></blockquote><p>举例:</p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string"><stdio.h></span></span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token keyword">int</span> a <span class="token operator">=</span> <span class="token number">10</span><span class="token punctuation">;</span><span class="token keyword">int</span> b <span class="token operator">=</span> <span class="token number">20</span><span class="token punctuation">;</span><span class="token keyword">int</span> max<span class="token punctuation">;</span><span class="token comment">//if (a > 5)</span><span class="token comment">//b = 3;</span><span class="token comment">//else</span><span class="token comment">//b = -3;</span><span class="token comment">//b = a > 5 ? 3 : -3;</span>max <span class="token operator">=</span> a <span class="token operator">></span> b <span class="token operator">?</span> a <span class="token operator">:</span> b<span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"a = %d\nb = %d\nmax = %d\n"</span><span class="token punctuation">,</span> a<span class="token punctuation">,</span> b<span class="token punctuation">,</span> max<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><img src="https://img-blog.csdnimg.cn/f74847a5c16e4f7dabd546ed4567e677.png" alt="在这里插入图片描述"></p><h1 id="8-逗号表达式"><a href="#8-逗号表达式" class="headerlink" title="8.逗号表达式"></a>8.逗号表达式</h1><blockquote><p>exp1, exp2, exp3, …….expN</p></blockquote><blockquote><p>逗号表达式:就是用逗号隔开的多个表达式。<br> 逗号表达式,从左向右依次执行,整个表达式的结果是最后一个表达式的结果。</p></blockquote><p>举例1:</p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string"><stdio.h></span></span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token keyword">int</span> a <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span><span class="token keyword">int</span> b <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">;</span><span class="token keyword">int</span> c <span class="token operator">=</span> <span class="token punctuation">(</span>a <span class="token operator">></span> b<span class="token punctuation">,</span> a <span class="token operator">=</span> b <span class="token operator">+</span> <span class="token number">10</span><span class="token punctuation">,</span> a<span class="token punctuation">,</span> b <span class="token operator">=</span> a <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> c<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>讲解:这里我们要输出c的值,那么c的值是什么呢?</p><blockquote><p> int c = (a > b, a = b + 10, a, b = a + 1);<br>这里初始化c的时候应用了逗号表达式,逗号表达式从左向右依次执行,整个表达式结果为最后一个表达式的结果,我们按照这个原则去推导,a > b 执行但是没有结果 a = b + 10 相当于a = 2 + 10 = 12, a执行但不产生结果,b = a + 1 = 12 + 1 = 13,整个表达式的值也等于b 即c = 13。</p></blockquote><p>对于这个结果我们可以运行程序验证一下。</p><p><img src="https://img-blog.csdnimg.cn/922d30cd3c654837b51d34b916f89a9b.png" alt="在这里插入图片描述"></p><p>拓展:那这里a, b的值分别为多少呢?<br><img src="https://img-blog.csdnimg.cn/de183c07f96840c38fd5e0ea3e44e4fd.png" alt="在这里插入图片描述"></p><p>a = 12, b = 13 不再是原本的1和2,说明int c = (a > b, a = b + 10, a, b = a + 1); 中运算的结果有效接保留了下来。</p><h1 id="9-下标引用、函数调用和结构成员"><a href="#9-下标引用、函数调用和结构成员" class="headerlink" title="9.下标引用、函数调用和结构成员"></a>9.下标引用、函数调用和结构成员</h1><p><strong>1.下标引用操作符 [ ]</strong><br>操作数: 一个数组名 + 一个索引值</p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string"><stdio.h></span></span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token keyword">int</span> a<span class="token punctuation">[</span><span class="token number">10</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">{</span> <span class="token number">0</span> <span class="token punctuation">}</span><span class="token punctuation">;</span><span class="token comment">//1.定义一个数组</span><span class="token comment">//2.如果我们想要访问第5个数组元素,并给其赋值</span>a<span class="token punctuation">[</span><span class="token number">4</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">10</span><span class="token punctuation">;</span><span class="token comment">//3.用数组变量名+[]+下标索引数字</span><span class="token comment">//4.[ ] 对应的两个操作数一个是变量名a 另外一个就是下标/索引值 4</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> a<span class="token punctuation">[</span><span class="token number">4</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><img src="https://img-blog.csdnimg.cn/da9d9d277e784e978ab66bebb72fb505.png" alt="在这里插入图片描述"></p><p><strong>2.函数调用操作符()</strong><br>接收一个或者多个操作数,第一个操作数是函数名,剩余的操作数就是传递给函数的参数。</p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string"><stdio.h></span></span><span class="token comment">//2.这个地方的()不是函数调用操作符,是函数定义的语法规则</span><span class="token keyword">int</span> <span class="token function">get_max</span><span class="token punctuation">(</span><span class="token keyword">int</span> x<span class="token punctuation">,</span> <span class="token keyword">int</span> y<span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token keyword">return</span> x <span class="token operator">></span> y <span class="token operator">?</span> x <span class="token operator">:</span> y<span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token keyword">int</span> a <span class="token operator">=</span> <span class="token number">10</span><span class="token punctuation">;</span><span class="token keyword">int</span> b <span class="token operator">=</span> <span class="token number">20</span><span class="token punctuation">;</span><span class="token comment">//1.调用函数的时候使用的() 就是函数调用操作符</span><span class="token keyword">int</span> max <span class="token operator">=</span> <span class="token function">get_max</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span> b<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//3.这里的函数调用操作符()的操作数为 函数名get_max,函数参数a,函数参数b 总共三个操作数</span><span class="token comment">//4.对于函数调用操作符()而言,其操作数至少要有一个(函数名),可以有多个</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"max = %d\n"</span><span class="token punctuation">,</span> max<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><img src="https://img-blog.csdnimg.cn/bf459f61d2254791a185c94a7764eff2.png" alt="在这里插入图片描述"></p><p><strong>3.访问一个结构的成员 . -></strong><br>思考:如何创建结构体类型和结构体类型变量呢?</p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string"><stdio.h></span></span><span class="token comment">//1.现实中为了描述复杂的对象,构建结构体类型</span><span class="token comment">//2.比如学生,有姓名,年龄,学号等信息</span><span class="token comment">//创建一个结构体类型</span><span class="token keyword">struct</span> <span class="token class-name">Stu</span> <span class="token comment">//3.struct Stu是一个结构体类型,表示学生类型</span><span class="token comment">//类型是用来创建变量的</span><span class="token punctuation">{</span><span class="token keyword">char</span> name<span class="token punctuation">[</span><span class="token number">20</span><span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token comment">//姓名</span><span class="token keyword">int</span> age<span class="token punctuation">;</span><span class="token comment">//年龄</span><span class="token keyword">char</span> id<span class="token punctuation">[</span><span class="token number">20</span><span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token comment">//学号</span><span class="token punctuation">}</span><span class="token punctuation">;</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token keyword">int</span> a <span class="token operator">=</span> <span class="token number">10</span><span class="token punctuation">;</span><span class="token comment">//使用struct Stu这个类型创建了一个学生对象s1,并初始化</span><span class="token keyword">struct</span> <span class="token class-name">Stu</span> s1 <span class="token operator">=</span> <span class="token punctuation">{</span> <span class="token string">"张三"</span><span class="token punctuation">,</span><span class="token number">20</span><span class="token punctuation">,</span><span class="token string">"20210403"</span> <span class="token punctuation">}</span><span class="token punctuation">;</span><span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>结构体类型和结构体类型变量详解:</p><blockquote><p>结构体类型和结构体类型变量的关系类似于图纸和房子的关系<br>在盖房子之前,需要有房屋盖建的设计图纸 。有了图纸,才能根据图纸盖出好房子。<br>在设计图纸环节,我们并不会真正去盖房子,所以就不会占用土地。<br>同样的道理,在创建结构体类型的时候,我们并不会真正去存储什么信息,只有在利用结构体类型创建变量的时候,才会去存储相应的信息,向内存申请存储空间。</p></blockquote><p>创建好结构体变量后,我们想要打印相关的信息来看一下,这时候就会用到访问一个结构的成员.或 -></p><p>1.结构体变量.成员名.操作符的操作数一个是结构体变量,另一个是成员名<br><img src="https://img-blog.csdnimg.cn/99b3f43f4bdd48a8a9b7214586111745.png" alt="在这里插入图片描述"></p><p>2.将结构的地址取出来放入指针,通过指针进行访问</p><p><img src="https://img-blog.csdnimg.cn/7a99b0f2cd2d4894a0b98d68accb86f1.png" alt="在这里插入图片描述"></p><p>第2中方式有点太啰嗦了,先要对指针解引用,如何通过.操作符访问结构体变量的成员。<br>实际上通过指针访问的方式可以更加精简一些</p><p>3.结构体指针->成员名 通过指针的方式直接访问到变量的成员。</p><p><img src="https://img-blog.csdnimg.cn/372c1d1d4a5f451da7b699753a8ec444.png" alt="在这里插入图片描述"></p><p>完整代码:</p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string"><stdio.h></span></span><span class="token comment">//1.现实中为了描述复杂的对象,构建结构体类型</span><span class="token comment">//2.比如学生,有姓名,年龄,学号等信息</span><span class="token comment">//创建一个结构体类型</span><span class="token keyword">struct</span> <span class="token class-name">Stu</span> <span class="token comment">//3.struct Stu是一个结构体类型,表示学生类型</span><span class="token comment">//类型是用来创建变量的</span><span class="token punctuation">{</span><span class="token keyword">char</span> name<span class="token punctuation">[</span><span class="token number">20</span><span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token comment">//姓名</span><span class="token keyword">int</span> age<span class="token punctuation">;</span><span class="token comment">//年龄</span><span class="token keyword">char</span> id<span class="token punctuation">[</span><span class="token number">20</span><span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token comment">//学号</span><span class="token punctuation">}</span><span class="token punctuation">;</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token keyword">int</span> a <span class="token operator">=</span> <span class="token number">10</span><span class="token punctuation">;</span><span class="token comment">//使用struct Stu这个类型创建了一个学生对象s1,并初始化</span><span class="token keyword">struct</span> <span class="token class-name">Stu</span> s1 <span class="token operator">=</span> <span class="token punctuation">{</span> <span class="token string">"张三"</span><span class="token punctuation">,</span><span class="token number">20</span><span class="token punctuation">,</span><span class="token string">"20210403"</span> <span class="token punctuation">}</span><span class="token punctuation">;</span><span class="token keyword">struct</span> <span class="token class-name">Stu</span><span class="token operator">*</span> ps <span class="token operator">=</span> <span class="token operator">&</span>s1<span class="token punctuation">;</span><span class="token comment">//结构体指针->成员名</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%s\n"</span><span class="token punctuation">,</span> ps<span class="token operator">-></span>name<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> ps<span class="token operator">-></span>age<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%s\n"</span><span class="token punctuation">,</span> ps<span class="token operator">-></span>id<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//printf("%s\n", (*ps).name);</span><span class="token comment">//printf("%d\n", (*ps).age);</span><span class="token comment">//printf("%s\n", (*ps).id);</span><span class="token comment">//printf("%s\n", s1.name);</span><span class="token comment">//printf("%d\n", s1.age);</span><span class="token comment">//printf("%s\n", s1.id);</span><span class="token comment">//结构体变量.成员名 .操作符的操作数一个是结构体变量,另一个是成员名</span><span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><img src="https://img-blog.csdnimg.cn/3b85b6e4ff604ba081754b578cea3f42.png" alt="在这里插入图片描述"></p><h1 id="10-表达式求值"><a href="#10-表达式求值" class="headerlink" title="10.表达式求值"></a>10.表达式求值</h1><p>表达式求值的顺序一部分是由操作符的优先级和结合性决定。<br>同样,有些表达式的操作数在求值的过程中可能需要转换为其他类型。</p><h1 id="11-隐式类型转换(悄悄的进行类型转换)"><a href="#11-隐式类型转换(悄悄的进行类型转换)" class="headerlink" title="11.隐式类型转换(悄悄的进行类型转换)"></a>11.隐式类型转换(悄悄的进行类型转换)</h1><p><strong>①C的整型算术运算总是至少以缺省整型类型的精度来进行的。</strong></p><p>为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升。<br>是不是看的不太懂?这里我们举例说明:</p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string"><stdio.h></span></span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token keyword">char</span> a <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">;</span><span class="token comment">//00000000 00000000 00000000 00000011 整数3</span><span class="token comment">//00000011 ->a a是char类型,只有一个字节,这时候就会发生截断</span><span class="token comment">//截断的规则:挑最小最低位的字节内容</span><span class="token keyword">char</span> b <span class="token operator">=</span> <span class="token number">127</span><span class="token punctuation">;</span><span class="token comment">//00000000 00000000 00000000 01111111 整数127</span><span class="token comment">//01111111 ->b</span><span class="token comment">//a+b a和b如何相加 按照变量数据类型的符号位来提升的</span><span class="token comment">//00000011 ->00000000 00000000 00000000 00000011</span><span class="token comment">//01111111 ->00000000 00000000 00000000 01111111</span><span class="token comment">// 00000000 00000000 00000000 10000010</span><span class="token keyword">char</span> c <span class="token operator">=</span> a <span class="token operator">+</span> b<span class="token punctuation">;</span><span class="token comment">//这时候a,b被提升为普通整型</span><span class="token comment">//10000010 ->c</span><span class="token comment">//后面我们要以%d的形式打印,需要进行整型提升:按照变量数据类型的符号位来提升的 </span><span class="token comment">//11111111 11111111 11111111 10000010 ---补码</span><span class="token comment">//11111111 11111111 11111111 10000001 ---反码</span><span class="token comment">//10000000 00000000 00000000 01111110 ---原码 -126</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> c<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%c\n"</span><span class="token punctuation">,</span> c<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><img src="https://img-blog.csdnimg.cn/732f21a9a53f497ea6fe42887dc86d38.png" alt="在这里插入图片描述"></p><p>至于为什么% c打印出来的是 ? 需要我们后面进行思考。</p><blockquote><p>整型提升的意义∶<br>表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度一般就是int的字节长度,同时也是CPU的通用寄存器的长度。<br>因此,即使两个char类型的相加,在CPU执行时实际上也要先转换为CPU内整型操作数的标准长度。 通用CPU(general - purpose CPU)是难以直接实现两个8比特字节直接相加运算(虽然机器指令中可能有这种字节相加指令)。<br>所以,表达式中各种长度可能小于int长度的整型值,都必须先转换为int或unsigned int,然后才能送入CPU去执行运算。</p></blockquote><p>如何进行整型提升呢 ?<br>整型提升是按照变量的数据类型的符号位来提升的</p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token comment">//负数的整型提升</span><span class="token keyword">char</span> c1 <span class="token operator">=</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>变量c1的二进制位<span class="token punctuation">(</span>补码<span class="token punctuation">)</span>中只有<span class="token number">8</span>个比特位<span class="token operator">:</span><span class="token number">1111111</span>因为<span class="token keyword">char</span>为有符号的<span class="token keyword">char</span>所以整型提升的时候,高位补充符号位,即为<span class="token number">1</span> 提升之后的结果是 <span class="token operator">:</span><span class="token number">11111111111111111111111111111111</span><span class="token comment">//正数的整型提升</span><span class="token keyword">char</span> c2 <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span>变量c2的二进制位<span class="token punctuation">(</span>补码<span class="token punctuation">)</span>中只有<span class="token number">8</span>个比特位<span class="token operator">:</span><span class="token number">00000001</span>因为<span class="token keyword">char</span> 为有符号的<span class="token keyword">char</span>所以整型提升的时候,高位补充符号位,即为<span class="token number">0</span> 提升之后的结果是 <span class="token operator">:</span><span class="token number">00000000000000000000000000000001</span><span class="token comment">//无符号整型提升,高位补0</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>整型提升举例:<br><img src="https://img-blog.csdnimg.cn/e6b42a63b990400d83ecdf1a68a25384.png" alt="在这里插入图片描述"></p><blockquote><p>解析:<br>0xb6 b:10 / 1011 6 / 0110 b6 10110110 整型提升后 高位补符号位1 变成了<br>11111111 11111111 11111111 10110110<br>负数 0xb600 10110110 00000000<br>整型提升后 高位补符号位1<br>变成了 11111111 11111111 10110110 00000000 负数</p></blockquote><p>实例1中if语句里面进行了比较,比较也是一种运算,其中的a, b要进行整型提升, 但是c不需要整型提升a, b整型提升之后, 变成了负数, 所以表达式a == Oxb6, b == Oxb600的结果是假, 但是c不发生整型提升, 则表达式 c == Oxb6000000的结果是真, 所程序输出的结果是 : c</p><p><img src="https://img-blog.csdnimg.cn/5b4c4d8885d340a6b45a5f7f587ae674.png" alt="在这里插入图片描述"></p><p>解析:<br>实例2中的, c只要参与表达式运算, 就会发生整型提升<br>表达式 + c, 就会发生提升, 所以sizeof(+c)是4个字节.<br>表达式c,表达式(!c)中c实际参与了运算,会发生整型提升,在vs编译器中显示的这个结果实际上是有问题的,在Linux,gcc编译器下结果为4,实际结果也应该为4。</p><blockquote><p>总结:什么时候会参与整型提升?<br>总要字节长度小于int,参与到实际运算后就会进行整型提升。</p></blockquote><p>②<strong>算术转换</strong></p><p>如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数的转换为另一个操作数的类型,否则操作就无法进行。下面的层次体系称为寻常算术转换。</p><blockquote><p>long doub1e<br>double<br>float<br>unsigned long int<br>long int<br>unsigned int<br>int</p></blockquote><p>如果某个操作数的类型在上面这个列表中排名较低,那么首先要转换为另外一个操作数的类型后执行运算。(比如说int类型跟float类型参与运算,先要将int转换为float类型,然后float类型与float类型运算)<br>int a = 1;<br>float b = 2.0<br>b = a + b;<br>(会先将a转换为float类型 a = 1.00000)</p><blockquote><p>警告 : 但是算术转换要合理,要不然会有一些潜在的问题。<br>例如:排名高的类型向低位转换的时候会出现精度丢失。<br>float f = 3.14;int num = f;//隐式转换,会有精度丢失</p></blockquote><p>③<strong>操作符的属性</strong></p><p>复杂表达式的求值有三个影响的因素。<br>1.操作符的优先级<br>2.操作符的结合性<br>3.是否控制求值顺序。<br>两个相邻的操作符先执行哪个 ? 取决于他们的优先级。如果两者的优先级相同,取决于他们的结合性。</p><p>**C语言操作符优先级、结合性参考表:<br><img src="https://img-blog.csdnimg.cn/eb8906bbd71549e88d6252dba4ac79b6.png" alt="在这里插入图片描述"></p><p>**常见问题解答:<br>1、如何记住运算符的15种优先级和结合性?<br>C语言中运算符种类比较繁多,优先级有15种,结合性有两种。<br>2、如何记忆两种结合性和15种优先级?下面讲述一种记忆方法。<br>结合性有两种,一种是自左至右,另一种是自右至左,大部分运算符的结合性是自左至右,只有单目运算符、三目运算符的赋值运算符的结合性自右至左。<br>优先级有15种。</p><p><strong>记忆方法:</strong></p><p><strong>记住一个最高的:构造类型的元素或成员以及小括号。</strong><br>记住一个最低的:逗号运算符。<br>剩余的是一、二、三、赋值。<br>意思是单目、双目、三目和赋值运算符。</p><p>在诸多运算符中,又分为:<br>算术、关系、逻辑。<br>两种位操作运算符中,移位运算符在算术运算符后边,逻辑位运算符在逻辑运算符的前面。再细分如下:<br>算术运算符分 * , / , % 高于 + , - 。<br>关系运算符中,〉,〉 = , < , <= 高于 == ,! = 。<br>逻辑运算符中,除了逻辑求反(!)是单目外,逻辑与( && )高于逻辑或( || )。<br>逻辑位运算符中,除了逻辑按位求反(~)外,按位与(&)高于按位半加(^),高于按位或( | )。<br>这样就将15种优先级都记住了,再将记忆方法总结如下:<br>去掉一个最高的,去掉一个最低的,剩下的是一、二、三、赋值。双目运算符中,顺序为算术、关系和逻辑,移位和逻辑位插入其中。</p><h1 id="12-问题表达式"><a href="#12-问题表达式" class="headerlink" title="12.问题表达式"></a>12.问题表达式</h1><p>下面我们来看一些问题表达式:</p><p>//表达式的求值部分由操作符的优先级决定。</p><p><strong>表达式1</strong></p><blockquote><p>a * b + c * d + e * f;</p></blockquote><ol><li>注释∶代码1在计算的时候,由于比 + 的优先级高,只能保证,的计算是比 + 早,但是优先级并不能决定第三个 * 比第一个 + 早执行。<br>所以表达式的计算机顺序就可能是︰<br>a * bc * d<br>a * b + c * de * f<br>a * b + c * d + e * f<br>或者 :<br>a * bc * de * f<br>a * b + c * d<br>a * b + c * d + e * f</li></ol><p><strong>表达式2</strong></p><blockquote><p>c + –c;</p></blockquote><p>注释︰同上,操作符的优先级只能决定自减–的运算在 + 的运算的前面,但是我们并没有办法得知, + 操作符的左操作数的获取在右操作数之前还是之后求值,所以结果是不可预测的,是有歧义的。</p><p><strong>代码3</strong><br>非法表达式</p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string"><stdio.h></span></span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">10</span><span class="token punctuation">;</span>i <span class="token operator">=</span> i<span class="token operator">--</span> <span class="token operator">-</span> <span class="token operator">--</span>i <span class="token operator">*</span> <span class="token punctuation">(</span>i <span class="token operator">=</span> <span class="token operator">-</span><span class="token number">3</span><span class="token punctuation">)</span> <span class="token operator">*</span> i<span class="token operator">++</span> <span class="token operator">+</span> <span class="token operator">++</span>i<span class="token punctuation">;</span> <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"i = %d\n"</span>,i<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>表达式3在不同编译器中测试结果不同,例如:</p><p><img src="https://img-blog.csdnimg.cn/4a948125e344410d9e85e5b07908b349.png" alt="在这里插入图片描述"></p><p><strong>代码4</strong></p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string"><stdio.h></span></span><span class="token keyword">int</span> <span class="token function">fun</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token keyword">static</span> <span class="token keyword">int</span> count <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token operator">++</span>count<span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">int</span> answer<span class="token punctuation">;</span> answer <span class="token operator">=</span> <span class="token function">fun</span><span class="token punctuation">(</span><span class="token operator">-</span><span class="token function">fun</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token function">fun</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span>answer<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//输出多少?</span> <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><img src="https://img-blog.csdnimg.cn/c14bbc1750dd407dac2258a2af718606.png" alt="在这里插入图片描述"></p><p>这个代码有没有实际的问题 ?<br>有问题!<br>虽然在大多数的编译器上求得结果都是相同的。<br>但是上述代码answer = fun() - fun() * fun(); 中我们只能通过操作符的优先级得知︰先算乘法,再算减法。函数的调用先后顺序无法通过操作符的优先级确定。</p><p><strong>代码5</strong></p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><stdio.h></span></span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span> <span class="token keyword">int</span> ret <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token operator">++</span>i<span class="token punctuation">)</span> <span class="token operator">+</span><span class="token punctuation">(</span><span class="token operator">++</span>i<span class="token punctuation">)</span> <span class="token operator">+</span><span class="token punctuation">(</span><span class="token operator">++</span>i<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> ret<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span>i<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>尝试在Linux环境gcc编译器,vS2019环境下都执行,看结果。<br>Linux运行结果:10 4<br>VS2019运行结果:12 4</p><p>看看同样的代码产生了不同的结果,这是为什么 ?<br>简单看一下汇编代码.就可以分析清楚.<br>这段代码中的第一个 + 在执行的时候,**第三个是否执行,这个是不确定的,因为依靠操作符的优先级和结合性是无法决定第一个+和第三个前置的先后顺序。</p><blockquote><p>总结∶我们写出的表达式如果不能通过操作符的属性确定唯一的计算路径,那这个表达式就是存在问题的。</p></blockquote><p><a href="https://blog.51cto.com/panyujie/3251460">详细文本</a></p>]]></content>
<summary type="html"><h1 id="1-算数操作符"><a href="#1-算数操作符" class="headerlink" title="1.算数操作符"></a>1.算数操作符</h1><p><img src="https://img-blog.csdnimg.cn/36b1ae3e921c</summary>
<category term="C语言" scheme="https://yyzqlqc.github.io/categories/C%E8%AF%AD%E8%A8%80/"/>
<category term="C基础" scheme="https://yyzqlqc.github.io/categories/C%E8%AF%AD%E8%A8%80/C%E5%9F%BA%E7%A1%80/"/>
<category term="C" scheme="https://yyzqlqc.github.io/tags/C/"/>
</entry>
<entry>
<title>这是一篇水文</title>
<link href="https://yyzqlqc.github.io/post/443f0b3e.html"/>
<id>https://yyzqlqc.github.io/post/443f0b3e.html</id>
<published>2022-12-25T14:15:38.891Z</published>
<updated>2022-12-25T14:15:38.891Z</updated>
<content type="html"><![CDATA[<h1 id="这是一级标题"><a href="#这是一级标题" class="headerlink" title="这是一级标题"></a>这是一级标题</h1><p>这一段是正文内容</p><h2 id="这是二级标题"><a href="#这是二级标题" class="headerlink" title="这是二级标题"></a>这是二级标题</h2><p>这是一段正文内容</p><h3 id="这是三级标题"><a href="#这是三级标题" class="headerlink" title="这是三级标题"></a>这是三级标题</h3><p>这是一段正文内容</p>]]></content>
<summary type="html"><h1 id="这是一级标题"><a href="#这是一级标题" class="headerlink" title="这是一级标题"></a>这是一级标题</h1><p>这一段是正文内容</p>
<h2 id="这是二级标题"><a href="#这是二级标题" class="</summary>
<category term="大学" scheme="https://yyzqlqc.github.io/categories/%E5%A4%A7%E5%AD%A6/"/>
<category term="大作业" scheme="https://yyzqlqc.github.io/tags/%E5%A4%A7%E4%BD%9C%E4%B8%9A/"/>
</entry>
<entry>
<title>Hello World</title>
<link href="https://yyzqlqc.github.io/post/4a17b156.html"/>
<id>https://yyzqlqc.github.io/post/4a17b156.html</id>
<published>2022-12-25T14:13:40.662Z</published>
<updated>2022-12-25T14:13:40.666Z</updated>
<content type="html"><![CDATA[<p>Welcome to <a href="https://hexo.io/">Hexo</a>! This is your very first post. Check <a href="https://hexo.io/docs/">documentation</a> for more info. If you get any problems when using Hexo, you can find the answer in <a href="https://hexo.io/docs/troubleshooting.html">troubleshooting</a> or you can ask me on <a href="https://github.com/hexojs/hexo/issues">GitHub</a>.</p><h2 id="Quick-Start"><a href="#Quick-Start" class="headerlink" title="Quick Start"></a>Quick Start</h2><h3 id="Create-a-new-post"><a href="#Create-a-new-post" class="headerlink" title="Create a new post"></a>Create a new post</h3><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">$ hexo new <span class="token string">"My New Post"</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>More info: <a href="https://hexo.io/docs/writing.html">Writing</a></p><h3 id="Run-server"><a href="#Run-server" class="headerlink" title="Run server"></a>Run server</h3><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">$ hexo server<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>More info: <a href="https://hexo.io/docs/server.html">Server</a></p><h3 id="Generate-static-files"><a href="#Generate-static-files" class="headerlink" title="Generate static files"></a>Generate static files</h3><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">$ hexo generate<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>More info: <a href="https://hexo.io/docs/generating.html">Generating</a></p><h3 id="Deploy-to-remote-sites"><a href="#Deploy-to-remote-sites" class="headerlink" title="Deploy to remote sites"></a>Deploy to remote sites</h3><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">$ hexo deploy<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>More info: <a href="https://hexo.io/docs/one-command-deployment.html">Deployment</a></p>]]></content>
<summary type="html"><p>Welcome to <a href="https://hexo.io/">Hexo</a>! This is your very first post. Check <a href="https://hexo.io/docs/">documentation</a> for</summary>
<category term="hexo" scheme="https://yyzqlqc.github.io/categories/hexo/"/>
<category term="hexo" scheme="https://yyzqlqc.github.io/tags/hexo/"/>
<category term="others" scheme="https://yyzqlqc.github.io/tags/others/"/>
</entry>
<entry>
<title>阆苑学子linux大作业视频讲解</title>
<link href="https://yyzqlqc.github.io/post/f1eb297c.html"/>
<id>https://yyzqlqc.github.io/post/f1eb297c.html</id>
<published>2022-12-25T14:07:49.180Z</published>
<updated>2022-12-25T14:07:49.180Z</updated>
<content type="html"><![CDATA[<div style="position: relative; width: 100%; height: 0; padding-bottom: 75%;"> <iframe src="//player.bilibili.com/player.html?aid=691516604&bvid=BV1L24y1Q7qi&cid=933444560&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" style="position:absolute; height: 100%; width: 100%;"> </iframe></div>]]></content>
<summary type="html"><div style="position: relative; width: 100%; height: 0; padding-bottom: 75%;">
<iframe src="//player.bilibili.com/player.html?aid=691516</summary>
<category term="大学" scheme="https://yyzqlqc.github.io/categories/%E5%A4%A7%E5%AD%A6/"/>
<category term="大作业" scheme="https://yyzqlqc.github.io/tags/%E5%A4%A7%E4%BD%9C%E4%B8%9A/"/>
</entry>
</feed>