C改变了一点uint32_t无法正常工作

cod*_*low 2 c bits sign uint32-t

我有

uint32_t bits = 0;

bits |= 1<< 31;
bits |= 1<< 15;
bits |= 1<< 14;
bits |= 1<< 13;
Run Code Online (Sandbox Code Playgroud)

这给了我10000000000000001110000000000000

而在我做的另一个功能*(bits) |= 0 << 15;但它没有做任何事情,它应该将第16个1更改为0,所以以下应该来:10000000000000000110000000000000

任何帮助?

dor*_*ege 5

将位更​​改为0的正确方法是and否定,例如

bits &= ~(1 << 15);
Run Code Online (Sandbox Code Playgroud)