从零开始学C语言
本帖最后由 熊猫拍板砖 于 2023-5-9 18:30 编辑站长发话了,四、学习记录贴请勿短时间发多个主题,可通过编辑或回复进行更新,无法回复编辑可发新帖。
所以C语言的所有更新就在这一个帖子里
0x00 信息的表示和存储(进制转换)
# 进制说明
计算机常用的存储和处理的进制是二进制、八进制、十进制、十六进制
- 二进制,计算机主要使用的
- 八进制,广泛应用与计算机系统
- 十进制,这个主要是给人类看的
- 十六进制,主要用于代码中的表示法,汇编中也用的多
因为 MarkDown 不支持公式,所以我们约定在括号后用`_2`表示进制,`_2`代表二进制,`_8`代表8进制,`_16`代表16进制
# 十进制
这个不过多介绍,就是我们正常使用的数字,逢10进1
# 二进制
使用 0,1 来表示
基数:2
二进制就是0和1,逢二进一
例如:`(101001)_2+(1)_2=(101010)_2`
# 八进制
使用 0,1,2,3,4,5,6,7 来表示
基数:8
逢八进一
表示法:0开头,比如十进制7,八进制用07
例如:`(713)_8+(114)_8=(1027)_8`
# 十六进制
使用 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f 来表示
基数:16
逢十六进一
表示法:0x或0X开头,0x10或0X10
例如:`(27b)_16+(18a)_16=(405)_16`
# 进制转换
## 二进制转换成十进制
`00101011` 转换成十进制是 `1*2^0+1*2^1+0*2^2+1*2^3+0*2^4+1*2^5=43`
`(00101011)_2=(43)_10`
## 八进制转十进制
`(745)_8=5*8^0+4*8^1+7*8^2=(485)_10`
## 十六进制转十进制
`(a13)_16=3*16^0+1*16^1+a*16^2=(2579)_10`
## 十进制转其它进制
全部用除法除
# 二进制、八进制、十六进制之间转换
- 八进制,十六进制之间转换都依赖于二进制
- 一个八进制位等于三个二进制位
- 一个十六进制位等于四个二进制位
## 八进制转二进制
|八进制|二进制|
|--|--|
|0|000|
|1|001|
|2|010|
|3|011|
|4|100|
|5|101|
|6|110|
|7|111|
示例:`(456)_8=(100|101|110)_2` 在这里,我用`|` 符号把二进制分成了三个块用来表示八进制位对应的二进制
## 十六进制转二进制
|十六进制|二进制|
|--|--|
|0|0000|
|1|0001|
|2|0010|
|3|0011|
|4|0100|
|5|0101|
|6|0110|
|7|0111|
|8|1000|
|9|1001|
|a|1010|
|b|1011|
|c|1100|
|d|1101|
|e|1110|
|f|1111|
示例:`(89f)_16=(1000|1001|1111)_2`和上面一样,用`|`分割
八进制转十六进制
- 先八进制转二进制
- `(342)_8=(011|100|010)_2`
- 然后二进制转十六进制
- `(1110|0010)_2=(e2)_16`
十六进制转八进制
- 先十六进制转二进制
- `(6f3)_16=(0110|1111|0011)_2`
- 然后二进制转八进制
- `(011|011|110|011)_2=(3363)_8`
参考书:《C Primer Plus》3.3数据:数据类型关键字
真没想到,我居然能在吾爱学C语言 02131103 发表于 2023-3-22 21:41
真没想到,我居然能在吾爱学C语言
无论是逆向还是正向开发,用到C的地方还是很多的 大神,来点C++的教程 基础c一定要学好 熊猫拍板砖 发表于 2023-3-22 21:45
无论是逆向还是正向开发,用到C的地方还是很多的
能不能具体说一下有哪些,好像目前市场JAVA居多 planckbug 发表于 2023-3-22 22:06
能不能具体说一下有哪些,好像目前市场JAVA居多
如现在的java等都是有gc的垃圾自动回收机制,C没有,C的垃圾回收得开发者自己回收,所以这能提高开发者对内存的掌握,什么时候回收都能掌握
在逆向开发中,现在很多的保护都是写在so里的,还有游戏的保护之类的都是需要会点C之类的
还有一些就是研究mysql源码之类的 直接从入门到放弃 学习学习 以前听人家说过,C学会了,其他的就容易了。C可以做任何其他语言做的东西。