4.把二进制数变为十进制数
您会有许多机会要把二进制数变为十进制数。为此只需进行一些简单的加法和乘法,具体如下面所示的VisualBasIC兼容型程序。其中规定了4个二进制位DO至D3的值。消息框MsgBox显示出您规定的二进制数的等效十进制数。例如1 001的运算结果为9。
用OR操作掩蔽数值
对计算机或微控制器端口的各个位进行操作很常见,但单独对个别位进行操作很常见,但单独对个别位进行操作往往是不可能的或不实际的。与此相反,您必须以4位或8位作为一组同时对各位进行控制。我们已经知道,在二进制记数制中,各个位有不同的权重,所心,12这个数是由以下各位组成的:
设想您的计算机或微控制器有一个4位的端口。您用O至15的任一值对每一位进行设定;0代表0000二进制位,而15代表1111二进制位。您需要有一种方法去单独控制某一位,但不改变其他位的状态。为此可使用Or(或)掩蔽操作,用起来很简单:
X=当前值Or待置1的位式中,当前值是当前4位的二进制值(只要利用QBasic中的Inp语句,就可以通过查询得到该端口的当前值),而待置1的位是您想把它为变为1的位。例如,假设当前值是7( 0111),而您想把第3位(权重为8)变为1,则可以X=70r8于是X变为15或1111。
注:在许多情况下,但不是在一切情况下,“或”操作的结果如同两数相加。但这并不总是真的,所以不要养成把“或”操作当成两数相加的坏习惯。
下面的Visual Basic兼容型程序说明如何利用“或”掩蔽操作对选中的位进行置1,但不改变其他位的状态。
假设×是您以前从端口读得的当前值,Mask是您想置1所选用的值,具体程序如下:
按照程序中规定的数值( X=3.Mask=2),结果仍然是3.这是因为“2”所对应的位本来就被置1。实际上,如果把X改为另一值,如4(二进制为0100),则结果变为6,即代表二进制数0110。
您也很容易把某一位关闭(即变为O).方法是使用Xor(异或)运算时,如下所示:
若要了解Xor如何操作,请参考以下的真值表: