# 二进制数据操作

# 字节与位

  • 字节(Byte,B):一种计量单位。一个字节存储 8 位无符号数,存储范围为 0~255。
  • 位(Bit):计算机内部数据存储的最小单位,1bit 就是一个 2 进制位,111001100 是一个八位二进制数。
    • 1B = 8bit
    • 1024B = 1KB
    • 1024KB = 1M
    • 1024M = 1G

# 进制

  • 二进制:0b 开头
  • 八进制:0 开头
  • 十六进制:0x 开头

# 数据在内存中的存储

计算机要处理的信息是多种多样的,如数字、文字、符号、图形、音频、视频等, 这些信息在人们的眼里是不同的。但对于计算机来说,它们在内存中都是一样的,都是以二进制的形式来表示。

# 为什么是二进制,而不是十进制?

内存条是一个非常精密的部件,包含了上亿个电子元器件,这些元器件,实际上就是电路,电路的电压会变化,要么是 0V,要么是 5V,只有这两种电压。5V 是通电,用1来表示,0V 是断电,用0来表示。所以,一个元器件有2种状态,0 或者 1。

通过电路来控制这些元器件的通断电,会得到很多0、1的组合。例如,8个元器件有 28=256 种不同的组合,16个元器件有 216=65536 种不同的组合。虽然一个元器件只能表示2个数值,但是多个结合起来就可以表示很多数值了。

一般情况下我们不一个一个的使用元器件,而是将8个元器件看做一个单位,即使表示很小的数,例如 1,也需要8个,也就是 00000001。

我们可以给每一种组合赋予特定的含义,例如,可以分别用 1101000、00011100、11111111、00000000、01010101、10101010 来表示 C、语、言、中、文、网 这几个字,那么结合起来 1101000 00011100 11111111 00000000 01010101 10101010 就表示”C语言中文网“。

所以,计算机使用二进制,而不是我们熟悉的十进制,写入内存中的数据,都会被转换成0和1的组合。

关于更多内存和程序之间的关系可以翻阅:http://c.biancheng.net/view/1727.html

都是用二进制存储的,十六进制只是为了给人们看的时候方便一点,毕竟二进制直接写出来太长了。为什么不用十进制表示呢?因为二进制转十进制需要经过一系列换算,而且长度还不一定(四位数的二进制,写成十进制,有可能是一位数,也有可能是两位数);而二进制转十六进制,每四位数的二进制都对应一位数的十六进制,直接通过查表就能转换,有经验的人甚至可以直接口算。所以,计算机内部都是用的二进制,但需要查看源码的时候,用十六进制写出来,不至于写出来太长,反推回去也很方便。所以,当涉及到源码时,一般都习惯用十六进制表示。

作者:diaodiaoidaoidao 链接:https://www.zhihu.com/question/347811171/answer/836037052 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。