10个开关,打算用一个unsign short 来表示如何判断只有一个开?

nobody@noone 2009-09-24 10:49:43
1一个unsign short有16位,可以满足10个开关
10个开关用二进制表示就是 000000 0000000000前6位备用
然后1表示开,0表示关
现在有一个问题,这些开关都无联系性,如何才能判断只有1个开?

我现在只有一个笨办法,就是一一和0000000001,0000000010,0000000100对比,但是这样要比10次,好像不太好
有什么更好的办法没?
...全文
68 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lijian22500 2009-09-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 tianyixiang 的回复:]
unsign short nValue;

(nValue&(nValue - 1)) == 0
[/Quote]

学习了
whg01 2009-09-24
  • 打赏
  • 举报
回复
1楼正解,结贴吧。
liao05050075 2009-09-24
  • 打赏
  • 举报
回复
楼上是对的。

其实就是判断一个数是不是2的幂。很经典的位运算的应用
TianYiXiang 2009-09-24
  • 打赏
  • 举报
回复
unsign short nValue;

(nValue&(nValue - 1)) == 0

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧