不解gocha

Cform 2007-05-08 04:01:41
gotcha错误7练习#include <iostream>

typedef unsigned short Bits;

inline Bits repeated( Bits b, Bits m )//看不懂该函数与下面这个函数的用法有何不同,它与下面这个函数比有除了能减少
循环外有何优点,请详述.
{ return b & m & (b & m)-1; };能把这句解释一下吗?


void dowop1( Bits options ) {
int ctr = 0;
for( int i = 0; i < 8; ++i )
if( options & 1<<(8+i) )还有这句;
if( ctr++ ) {
std::cerr << "Too many options selected" << std::endl;
break;
}
}

void dowop2( Bits options ) {
if( repeated( options, 0XFF00 ) )
std::cerr << "Too many options selected" << std::endl;
}

void boolTest() {
std::cout << "=== bool test ===" << std::endl;
Bits opts[] = { 0x0000, 0x1000, 0x1011, 0x2100, 0xf000 };
for( int i = 0; i < sizeof(opts)/sizeof(opts[0]); ++i ) {
std::cerr << "Options: " << std::hex << opts[i] << std::endl;
dowop1( opts[i] );
dowop2( opts[i] );
}
}
谢谢,请详述
...全文
227 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jixingzhong 2007-05-10
  • 打赏
  • 举报
回复
if( options & 1<<(8+i) )还有这句;

这句的意思就是判断 options 的 第8+i 位是否为 1,
是则进行下面的操作。

其实也就是判断高位字节的第i是否为1
jixingzhong 2007-05-10
  • 打赏
  • 举报
回复
看岔了,没有问题:

return b & m & (b & m)-1;
先执行 (b & m)
然后执行 (b & m)-1
然后执行b & m
然后执行 最后的 & 操作
jixingzhong 2007-05-10
  • 打赏
  • 举报
回复
{ return b & m & (b & m)-1; }

就是 b和m位与运算,
然后 -1 而已。

不过这个 return b & m & (b & m)-1; 是不是有点问题?
漏了括号了么?
jixingzhong 2007-05-10
  • 打赏
  • 举报
回复
看不懂该函数与下面这个函数的用法有何不同 ??

函数 和 函数的用法?
它们能相同么?
  • 打赏
  • 举报
回复
都是位运算,看起来太费劲了
Cform 2007-05-10
  • 打赏
  • 举报
回复
怎么没人答呀

65,213

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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