0和1
0和1是计算机的基石,000111111...
本文讲讲其中的一些小细节,小知识点,2's complement, 变长编码,等等,不定期补充更多的小知识点。
大部分只有写特别的代码才会接触,而如果你掌握其中的思想,那么就能以不变应万变。
阅读完本文,就会明白
- 负数在计算机怎么被表示,为什么要用2的补码来表示?
- 为什么2的补码是取反码,然后加上1?
- 知道一个数,怎么求它的2的补码?
- 知道2的补码,怎么知道原来的数是多少?
- UTF-8是怎么理解?
- LEB128又是什么?
- 自然数和它的表示形式有什么区别?
二进制单位
bit,中文译为位,是指0或者1两个状态,是二进制中是最小的单位。
byte,即字节,有8个位。
当用16进制表示的时候,0xAB是一个byte,但是看起来是有两个数字。其中一个数字表示4bit。
一位叫bit,8位叫byte,猜猜4位叫什么?答案,是nibble。用得比较少。但是我还是喜欢它,因为它对应着16进制的时候的一个数字,比如一个字节0xAB, A或者B就是一个nibble.
进制和转换
我们大部分人熟悉的是10进制。0,1,2,3,4,5,6,7,8,9。
135代表着1*10^2 + 3 *10^1 + 5* 10^0
而程序员熟悉的还有2进制(前缀0b),8进制(前缀0),16进制(前缀0x)。
10进制数字如何表示成2进制,8进制,16进制呢?这个估计大家都比较熟悉了。
以及2进制,8进制,16进制这些互转大家也很熟悉。
我一般都是直接开个gdb或者lldb来转换,比如

本文探讨了计算机中0和1的基础,二进制单位,进制转换,特别是负数在计算机中的表示方式,重点介绍了2的补码的概念,以及其在减法运算中的作用。此外,还提到了变长编码如UTF-8,为理解LEB128编码铺垫。
5万+

被折叠的 条评论
为什么被折叠?



