1.1 进制与字节

题单介绍

数学中常用的十进制的定义:逢十进一 即9+1=10。在十进制下的数$123=1*10^2+2*10^1+3*10^0$ 以此类推,X进制下逢X进一。在X进制下的数$123=1*X^2+2*X^1+3*X^0$ 在计算机中,由于最小单位只有高电位和低电位两种可能,即1和0。所以绝大部分计算机都是二进制的。那么运算时也都是在二进制下进行运算。 但由于二进制下表示一个数会导致这个数写出来会很长,为了缩短长度,我们还常用8进制和16进制表示一个数。(不用十进制是因为二进制与十进制转换比较慢) 那么一个数怎么在二进制与十进制之间转换呢? 若果要让二进制数1101转换为十进制的话,我们可以使用进制的定义来转换: $1101=1*2^3+1*2^2+0*2^1+1*2^0=8+4+1=13$ 若果要让十进制数1101转换为二进制的话,我们可以先判断这个数在二进制下的最低位是多少,再判断上面的位是什么: 根据二进制的定义,若一个二进制数有n位,那么可以表示为$a_{n-1}a_{n-2}a_{n-3}...a_{2}a_{1}a_{0}$,每一位$a_i$都可以是0或者1。那么他在十进制下的值为$a_{n-1}*2^{n-1}+a_{n-2}*2^{n-2}+a_{n-3}*2^{n-3}+...+a_{2}*2^{2}+a_{1}*2^{1}+a_{0}*2^{0}$ 很显然,减去$a_0$后这个数一定是2的倍数。若这个数是奇数,那么$a_0=1$,否则$a_0=0$。 得到最低位$a_0$的值后,将原来的数除以2。得到的数等于$a_{n-1}*2^{n-2}+a_{n-2}*2^{n-3}+a_{n-3}*2^{n-4}+...+a_{2}*2^{1}+a_{1}*2^{0}$ 也就是二进制下的$a_{n-1}a_{n-2}a_{n-3}...a_{2}a_{1}$。那么$a_1$的求法与$a_0$一样。 一直求最后一位数,直到二进制的每一位数的值都求完了为止。 或者说,每一次除以二,把余数按顺序记下来,直到数被除为0。然后把余数从后往前写一边,就是这个数的二进制了。 比如十进制数123转化为二进制: ``` 123 … 1 61 … 1 30 … 0 15 … 1 7 … 1 3 … 1 1 … 1 0 那么123对应的二进制就是1111011 ``` 十进制小数转化为二进制也是类似的方法:每次将其乘2,把整数部分提取出来。直到为0为止。(可能会出现无法停止的情况,那么就是无限循环小数) 比如十进制小数0.625转化为二进制: ``` 0.625 … 0 1.25 … 1 0.5 … 0 1 … 1 那么0.625对应的二进制就是0.101 ``` 二进制与八进制的互相转换: 二进制数11010011101转化为八进制时,先将其分割成三位一组(不足则前面补0)011 010 011 101。对于每一组将其转化为八进制,再连起来,变成3235。 八进制转化为二进制时也是一样,先将每位数字转化为3位的二进制,再将他们连起来。比如八进制数1234转化为二进制后,为 001 010 011 100,即1010011100。 二进制与十六进制的转化方式与八进制类似,把3位1组改为4位1组即可。 字节:在计算机中8个二进制位为一个字节。字节是计算机存储的基本单位。 在c语言中,整数常量可以用十进制、八进制和十六进制来表示。八进制要在数字前加0,十六进制要在数字前加0x。十六进制里的数字若大于9,则从小到大用字母ABCDEF表示。 比如十进制的123在c语言里有三种表示法: ``` 123 (十进制) 0173 (八进制) 0x7B (十六进制) ``` [习题](https://www.luogu.com.cn/paste/rw99xjea)

题目列表