4:arm汇编语言4:bits/byte的介绍(ASCII码)与二进制补位
4.2 bits/byte的介绍与ASCII码的引入
这个是详细介绍计算机内部原理的基础,bits与byte其实这两个是计算机中非常重要的单位。首先看一下bits,它是一个基础的计算机单位。计算机单位?像长度单位是米,体重的单位是kg,你这个是啥玩意呢?
比特(bit)是计算机数据的最小单位,只能表示两个状态:0 或 1。它是构成更大数据单位(如字节、千字节等)的基本元素,用来表示和处理信息。1bit中只有0,1两个状态(在经典计算机中),而计算机中的东西都是以0/1表示的。但是吧这个实在是太小了,所以我们一般使用byte(字节)来进行一些计算等等的事情。
bytes(字节)1bytes = 8bits,所以一个字节能有八个比特。比如说010000000这个就是代表了一个字节(一个1/0代表的是一个bits)。那具体这个01000000代表啥这个会在之后说到。一个字节代表了256个整数。(当然具体的范围要等会儿说),因为每一个比特是两种情况,所以应该是个整数。
那么到这里我知道了计算机不喜欢用十进制的数字,喜欢使用二进制的方式,(二进制是计算机的基础)而为啥之前的文章要写十六进制呢?是因为十六进制是二进制较为简单的缩写,同样在计算机的内部也经常使用。那么到这里有一个非常大的逻辑漏洞,那么我的字母,小数点,逗号,引号,那计算机是怎么认识的呢,这个就要提到ASCII码了
这个图片是来自于这个网址ASCII码十六进制的表格 - 搜索 图片 (bing.com)。原来的网站是ASCII码对照表(完整版)_360新知 (so.com)。
在这个代码中非常详细的讲解了为啥,同样二进制也是八位的,一个byte,比如说我打了一个“ha”
ha这个可以对照表(注意大小写是不一样的):01101000 01100001(二进制);68 61(十六进制);这个就是为啥计算机能懂我们写的东西了,因为都是由这个数字编写而成。
那么刚刚说的0100 0000是啥,可以对照一下ASCII表是:@。
4.2二进制体系与二进制补位
4.2.1介绍二进制补位
刚才在介绍关于八比特等于一字节,然后有256个数字,但是并没有范围的时候,其实大家的第一反应肯定是[0,255]啊,这不是很简单么,那么这个是无符号的二进制体系。很简单0000 0000是0这样子到255,但是有一个问题,怎么表示负数,所以在8位的时候(也就是一个字节)有一个特殊的体系叫做二进制补位,补位的出现,弥补了我们没有负数的情况。
二进制补位圆圈 - 搜索 图片 (bing.com),这个圆圈其实非常的清楚。(可以说在补码的情况下左边是0的一般是正数,然而左边是1的是负数)那么补码的出现很好的帮助计算机做减法,有负数这些问题。那么在4bits的情况下范围是[0,15],有补码的情况下是[-8,7],而这个范围的计算公式是
这个n是指有几个bits。那么返回来8bits的情况下有补码的时候范围是啥呢,是这个范围。
4.2.2补码的经典问题
到这里如果我问你,在4位二进制的体系下,-3是多少?查表得1101
那么8bits呢?
那么10bits呢?
那么20bits呢?
不能全部列出来啊,这个太难受了
所以遇到这个非常非常经典问题的时候,你的解决方法其实非常多,我现在介绍一种
我用4bits下,-3是多少为例子?因为这个最为简单(学习理科都是先学习简单的,然后总结经验,做出假设,最后证明推向所有情况)首先我们来看一下4bits中有个数字。16个数字,那么-1 是15(因为是0000左边那个)那么刚好-1的那个值是15的二进制。1111,这是巧合么?可以继续探究,得出了第一种方法。我们首先计算有多少的值,然后减去它想要的数字,从而能知道这个数字的二进制码是多少。
关于正数呢?更简单了,它压根就是十进制,因为你观察十进制的1-7(4bits中)就是二进制的1-7,因为补码在这个时候并没有改变。