# 前言
2024年4月10号也算是有纪念意义的一天吧,什么纪念意义呢?前面博客可能也说过,本人经历过两年前端,然后因为一些不可控的原因转为java后端一年,然后前段时间因为一些原因接触了解了嵌入式这个行业,所以根据自己的想法今天又来学了嵌入式这个方面,这时候会有人问了,说博主你学这么多这么杂能不能记住?那我的回答必然是半斤八两多咯,还记得之前听过一句开玩笑的说法,说在程序员这个圈子里的鄙视链,接下来讲一讲别喷我奥,反正也不是我说的,说做C语言开发的会鄙视做C++的(C++也是种计算机语言,跟c大差不差只不过没有C语言那么底层),做C++的会鄙视做JAVA的(因为JAVA不会做这么底层的东西,做的都是些软件服务器的开发),做JAVA的会鄙视做C#的,做C#的会鄙视做Python的,更好玩的是前面说的所有语言都会不约而同的鄙视做php的(虽然说php差不多已经被淘汰了,只不过没有前面那么火,曾经也是个挺权威的语言,现在还在坚持php的大佬不要喷我!!!)但是不管是php还是java、python、c#在公司里好歹做的都是核心服务器开发,但是前端基本上都是没有什么特别复杂的业务,所以前面那些语言又不约而同的鄙视上了前端哈哈哈,但前端好歹也是程序员也是敲代码的,前端也会鄙视做测试的、运维的,但是不要管这鄙视链多长,C语言都是站在顶端的男银,那么好,我就要当人上人哈哈哈哈,希望以上提到的行业大佬不要来喷我,好歹哥们儿也是经历过前端、java才来的C语言,不然都学了也不好意思喷啊。
![07D8A8BC.png](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/2a80ae4b907c431c936d35558872b92c~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=48&h=48&s=4701&e=png&a=1&b=f0b429)
众所周知,要卷嵌入式先卷C语言,只不过我卷的比较慢,才刚刚开始,但是也是从基础学起纯纯小白一名(有嵌入式的大佬看到我这篇文章可以联系联系我,不懂就问就是我这个人的性格嗷),今天学习先了解了C语言,搭建了编程环境,当然现在在学习时间没那么专业,直接vscode起飞。
<img src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e7fbecef3a754ef9bc961edfd72fbb96~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=511&h=993&s=78733&e=png&b=1f2031" alt="image.png" width="30%" />
# 正文
接下来看看都学啥了吧这一天
![image.png](https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/00bbd51400aa4f99b28efd5ff2ec4602~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=365&h=430&s=28591&e=png&b=1f2031)
感觉还可以,也是基础,越往后越不容易了,挑一个讲讲吧:计算机数值存储方式(原反补)
### 原码
十进制数按照:除二取余、倒序排列,得到的就是原码。
```js- 10 -> 0000 1010
-10 -> 1000 1010
-1 -> 1000 0001
1 -> 0000 0001
```
问题
原码在做计算的时候会出现一些问题,比如正负数的加法运算,以及零的问题。
正负数加法
-1 + 1 = 0
```C
1000 0001
+ 0000 0001
----------------
1000 0010 -> -2 ?
```
正负零
+0 和 -0
十进制数字0,占了两个二进制;
```C
0000 0000
1000 0000
```
反码
为了解决上面的问题,出现了反码,反码的计算规则如下:
正数的反码就是原码本身;
负数的反码是按位取反(但符号位不变);
示例
```C
● 1 -> 0000 0001 -> 0000 0001
● -1 -> 1000 0001 -> 1111 1110
```
1111 1111 是运算完之后的结果,但要注意,这时还是反码,需要重新返回来:1000 0000 。
反码解决了正负数加法问题,但正负零的问题还是存在。
补码
正数的补码就是原码本身;
负数的补码就是在反码的基础上+1;
```C
0000 0001
+ 1111 1111
----------------
0000 0000
```
补码在正负数加减法运算时没问题,也不会出现正负零占两个二进制。但 1000 0000 不表示为负零,用来表示什么呢?计算机其实默认把8位有符号二进制 1000 0000 表示为 -128 。
```C
int8_t e = 0b10000000;
printf("%d\n", e);
```
# 结尾
在嵌入式编程的学习之旅中,每一步都是重要的。从C语言的基础开始,我们逐渐探索着计算机的内部机制,了解着数值的存储方式。虽然路途可能会艰难,但正是这种不断学习、探索的过程,让我们不断成长,不断进步。让我们怀着对知识的渴望,继续前行吧!