很明显需要26位。
如果每次的计算都需要计算器的话,很多的时候可能不太方便。这里笔者整理出一种“看一眼就知道位宽”的技巧。
首先需要牢记2的0次幂至10次幂的值,这个难度并不大。下面来看一个例子:
计算147258369的二进制位宽。
1. 分隔为3个1组:147_258_369。
2. 将第一组的数加1,后面的数全部换为0,如果后面组已经是0,第一组不加1。
147258369 < 148_000_000 = 148*1000*1000 < 148*1024*1024
2的次幂为1024,所以148*1024*1024为148乘以2的20次幂。148正好处于128和256中间,选择256。
最后的数字为256*1024*1024,即最后的数字为2的28次幂,也就是利用28位的二进制就可以表示此数字。
所以对于50_000_000,后面的六个0为20位,50需要用64表示,所以共需要26位。
此方法会有一定的误差,但是误差最多为1个位宽。能够比较方便快捷的计算某个数字的位宽,加快了设计进度。
在计算有符号数时,直接计算其绝对值的位宽,然后将位宽在扩大1位即可。
有符号数的表示为最高位为符号位,不表示数值大小,所以计算完绝对值的位宽后,需要加上一个符号位即可。
在上述说明中,主要阐述了整数位宽的确定。对于小数来说,重点关注的不是位宽而是位宽所能达到的精度。
在数字电路中,所有的数字都是由二进制来表示,对于很多的数字是无法用有限的二进制来进行的,所以此时就需要用一个近似值来表示。
关于小数位宽的确定不做过多介绍,有兴趣的读者可以自行查询相关资料。