c++ - 为什么 c 位域中的 unsigned int 值变成了 signed 值?

标签 c++ bit-fields

#include <iostream>
#include <stdint.h>
struct Foo 
{
    int a : 2;
    int b : 2;
    int c : 2;
    int d : 2;
};
int main()
{
    Foo foo;
    foo.d = 2;
    std::cout << sizeof(foo) << std::endl;
    std::cout << foo.d << std::endl;
    return 0;
}

用g++,结果变成了4 -2,foo.d怎么变成-2了?

最佳答案

int 默认是有符号的,所以 int :2 的范围是 -2 到 1。使用 unsigned int :2 如果您希望能够存储值 0 到 3。

关于c++ - 为什么 c 位域中的 unsigned int 值变成了 signed 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21620848/

相关文章:

如果使用自定义类类型作为键,C++ unordered_set 的计数和查找将不起作用

c++ - 类内成员初始化是否删除赋值运算符?

c++ - Virtual destructor和Vtable之间有什么关系吗

c++ - VK_FILTER_NEAREST 在采样期间不起作用

c++ - 如何知道给定的 DLL 是否被给定的进程加载?

c - 将位域结构映射到 volatile 寄存器

c - 大端和小端的混合位域和结构域的对齐

c++ - 我如何专门为以下目的使用位域

c - 包含位域的结构的大小

c++ - C++内存模型和最大位字段序列