有八盏灯从0到7编号,怎样在程序中模拟控制它们的明灭?
可以定义一个长度为8的一维短整型数组a,若a[0]的值为1,就表示0号灯亮;值为0,就表示0号灯不亮。一盏灯的状态只需二进制的一位就可以描述,用短整型太浪费内存空间,在内存有限的特定情形下,这种作法不可行。
可以定义一个无符号的字符型变量c,用其二进制编码中的一位对应于一盏灯。当某位上的数为1时,表示对应的灯亮;为0时表示对应的灯不亮。如变量c的值为128(1000 0000),则表示只有7号灯亮,其余的灯不亮;为192(1100 0000),表示6号和7号灯亮,其余的不亮。这种作法的问题在于怎样通过调整某位的值来控制一盏灯的明灭,如“若0号灯亮就关掉它;否则,就打开它”。
与0号灯状态对应的是变量c二进制编码最低位上的数,如果变量c二进制编码最低位上的数是1,就将其变为0;否则,即最低位上数是0,就将其变为1。调整变量c二进制编码某位上的数,且调整时还不能影响其它位上的数,可以利用C语言中的位运算。位运算是指按二进制位进行的运算。
位运算基于整数的二进制编码,即内存状态。计算机中整数采用补码,有关编码的知识可参见第13章。使用格式字符o或x,printf函数可以输出一个整数八进制形式或十六进制形式的编码。
C语言支持位运算,这也是C语言又被称为中级语言的一个原因。