c++ - 错误 : expression must have pointer-to-object type

标签 c++

我试图设计一个程序,它将返回原始 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等于(将 wOR1 左移 i ,并将其分配给 w )

about C/C++ bit manipulation

关于c++ - 错误 : expression must have pointer-to-object type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21421478/

相关文章:

android - 在 iOS 和 Android 上跨平台使用静态 .a-library 可能吗? (那么 .so 和 .dylib 呢?)

c++ - 特征矩阵库的模板类型转换

c++ - 带有 STL vector 的自定义分配器(在 Visual Studio 工具链中)

c++ - 显示 c/c++ 中可用的系统错误

c++ - 将参数传递给自动转换为指针的函数

c++ - Qt Widget 不显示

c++ - openGL子纹理

c++ - 错误 : expression must have integral or unscoped enum type when incrementally filling in vectors

c++ - 如何从另一个方法调用指向方法的指针

c++ - 多线程访问同一个双端队列C++