C 语言基础
二进制
我们平时使用的数字都是由 0~9 共十个数字组成的,因为逢十进一(满十进一)叫做十进制(Decimalism)。十进制是在人类社会发展过程中自然形成的,它符合人们的思维习惯,例如人类有十根手指,也有十根脚趾。在计算机内部,数据都是以二进制的形式存储的,二进制是学习编程必须掌握的基础。用0、1两个数字来表示数值,这就是二进制(Binary)。例如,数字 0、1、10、111、100、 都是有效的二进制。
二进制加减法和十进制加减法的思想是类似的:
- 对于十进制,进行加法运算时逢十进一,进行减法运算时借一当十;
- 对于二进制,进行加法运算时逢二进一,进行减法运算时借一当二。
1) 二进制加法:1+0=1、1+1=10、11+10=101、111+111=1110
2) 二进制减法:1-0=1、10-1=1、101-11=10、1100-111=101
八进制
除了二进制,C语言还会使用到八进制。八进制有 0~7 共8个数字,基数为8,加法运算时逢八进一,减法运算时借一当八。
1) 八进制加法:3+4=7、5+6=13、75+42=137、2427+567=3216
2) 八进制减法:6-4=2、52-27=23、307-141=146、7430-1451=5757
十六进制
除了二进制和八进制,十六进制也经常使用,甚至比八进制还要频繁。十六进制中,用A来表示10,B表示11,C表示12,D表示13,E表示14,F表示15,因此有 0~F 共16个数字,基数为16,加法运算时逢16进1,减法运算时借1当16。(不区分大小写)
1) 十六进制加法:6+7=D、18+BA=D2、595+792=D27、2F87+F8A=3F11
2) 十六进制减法:D-3=A、52-2F=23、E07-141=CC6、7CA0-1CB1=5FEF
进制转换
二进制、八进制和十六进制向十进制转换都非常容易,就是“按权相加”。所谓“权”,也即“位权”。
假设当前数字是 N 进制,那么:
- 对于整数部分,从右往左看,第 i 位的位权等于Ni-1
- 对于小数部分,恰好相反,要从左往右看,第 j 位的位权为N-j。
例如,将八进制数字 53627 转换成十进制:
再如,将十六进制数字 9FA8C 转换成十进制:
将二进制数字11010转换成十进制也是类似的道理:
小数部分
将八进制数字 423.5 转换成十进制:
将二进制数字 1010.101 转换成十进制:
十进制转换为二进制、八进制、十六
1) 整数部分
十进制整数转换为 N 进制整数采用“除 N 取余,逆序排列”法。具体做法是:
- 将 N 作为除数,用十进制整数除以 N,可以得到一个商和余数;
- 保留余数,用商继续除以 N,又得到一个新的商和余数;
- 仍然保留余数,用商继续除以 N,还会得到一个新的商和余数;
- ……
- 如此反复进行,每次都保留余数,用商接着除以 N,直到商为 0 时为止
十进制数字 36926 转换成八进制的结果为 。十进制数字 42 转换成二进制的结果为 。
小数部分
十进制小数转换成 N 进制小数采用“乘 N 取整,顺序排列”法。具体做法是:
- 用 N 乘以十进制小数,可以得到一个积,这个积包含了整数部分和小数部分;
- 将积的整数部分取出,再用 N 乘以余下的小数部分,又得到一个新的积;
- 再将积的整数部分取出,继续用 N 乘以余下的小数部分;
- ……
- 如此反复进行,每次都取出整数部分,用 N 接着乘以小数部分,直到积中的小数部分为 0,或者达到所要求的精度为止。
十进制小数 0.5 转换成八进制小数的结果为 0.7345
十进制java语言基础十进制小数 0.6875 转换成二进制小数的结果为 0.1011
前 17 个十进制整数与二进制、八进制、十六进制的对应关系:
注意,十进制小数转换成其他进制小数时,结果有可能是一个无限位的小数。请看下面的例子:
- 十进制 0.51 对应的二进制为 0.000010111...,是一个循环小数;
- 十进制 0.72 对应的二进制为 0.0011110...,是一个循环小数;
- 十进制 0.625 对应的二进制为 0.101,是一个有限小数。
二进制和八进制、十六进制的转换
- 二进制整数和八进制整数之间的转换
二进制整数转换为八进制整数时,每三位二进制数字转换为一位八进制数字,运算的顺序是从低位向高位依次进行,高位不足三位用零补齐。
二进制整数 转换为八进制的结果为 1674
八进制整数 2743 转换为二进制的结果为
- 二进制整数和十六进制整数之间的转换
二进制整数转换为十六进制整数时,每四位二进制数字转换为一位十六进制数字,运算的顺序是从低位向高位依次进行,高位不足四位用零补齐。
二进制整数 10 1101 0101 1100 转换为十六进制的结果为 2D5C
十六进制整数 A5D6 转换为二进制的结果为 1010 0101 1101 0110
存储单位
内存条是一个非常精密的部件,包含了上亿个电子元器件,它们很小,达到了纳米级别。这些元器件,实际上就是电路;电路的电压会变化,要么是 0V,要么是 5V,只有这两种电压。5V 是通电,用1来表示,0V 是断电,用0来表示。所以,一个元器件有2种状态,0 或者 1。
一般情况下我们不一个一个的使用元器件,而是将8个元器件看做一个单位,即使表示很小的数,例如 1,也需要8个,也就是 00000001。
1个元器件称为1比特(Bit)或1位,8个元器件称为1字节(Byte),那么16个元器件就是2Byte,32个就是4Byte,以此类推:
- 8×1024个元器件就是1024Byte,简写为1KB;
- 8×1024×1024个元器件就是1024KB,简写为1MB;
- 8×1024×1024×1024个元器件就是1024MB,简写为1GB。
单位换算:
- 1Byte = 8 Bit
- 1KB = 1024Byte = 210Byte
- 1MB = 1024KB = 220Byte
- 1GB = 1024MB = 230Byte
- 1TB = 1024GB = 240Byte
- 1PB = 1024TB = 250Byte
- 1EB = 1024PB = 260Byte
虚拟内存
如果我们运行的程序较多,占用的空间就会超过内存(内存条)容量。例如计算机的内存容量为2G,却运行着10个程序,这10个程序共占用3G的空间,也就意味着需要从硬盘复制 3G 的数据到内存,这显然是不可能的。
操作系统(Operating System,简称 OS)为我们解决了这个问题:当程序运行需要的空间大于内存容量时,会将内存中暂时不用的数据再写回硬盘;需要这些数据时再从硬盘中读取,并将另外一部分不用的数据写入硬盘。这样,硬盘中就会有一部分空间用来存放内存中暂时不用的数据。这一部分空间就叫做虚拟内存(Virtual Memory)。
3G - 2G = 1G,上面的情况需要在硬盘上分配 1G 的虚拟内存。
ASCII 编码一览表
标准 ASCII 编码共收录了 128 个字符,其中包含了 33 个控制字符(具有某些特殊功能但是无法显示的字符)和 95 个可显示字符。
包含了基本的拉丁字母(英文字母)、阿拉伯数字(也就是 )、标点符号(等)、特殊符号(等)以及一些具有控制功能的字符(往往不会显示出来)。
ASCII码一览表 https://c.biancheng.net/c/ascii/
输入法
编写代码的时候必须使用英文半角输入法,尤其是标点符号,初学者一定要引起注意。
C语言程序的整体框架
- 命令计算机输出字符串;
- 是要输出的内容;
- 表示语句结束。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/h6javajc/2002.html