我试图设计一个程序,它将返回原始 32 位值 w
,但将数字 i
元素更改为 1
。这是我到目前为止的功能。但是对于这部分 v[i]=1;
,它只是说对于 i
表达式必须有指向对象类型的指针。
unsigned int setBit(unsigned int w,unsigned int i)
{
unsigned int v = w;
v[i]=1;
return v;
}
最佳答案
unsigned int v = w;
v[i] = 1; // error, v is not an array
这是不正确的,因为 v
不是数组。解决方案可能是使用 std::bitset
或者简单地移动位并使用一些位操作 - 这会更快。
unsigned int setBit(unsigned int w,unsigned int i) {
unsigned int v = ( w |= 1 << i);
return v;
}
用法:
int main(int argc, char *argv[])
{
unsigned int in = 0;
unsigned int res = setBit(in,1); // set 1st bit in 0 to 1, results in 2
return 0;
}
unsigned int v = ( w |= 1 << i);
的含义
| - the bitwise OR
<< - the bitwise shift
v = ( w |= 1 << i)
与v = ( w = w | 1 << i)
相同所以这意味着:v
等于(将 w
和 OR
与 1
左移 i
,并将其分配给 w
)
关于c++ - 错误 : expression must have pointer-to-object type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21421478/