12 位运算

有八盏灯从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语言又被称为中级语言的一个原因。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值