【问题标题】:Why unsigned int value in c bit-field became signed value?为什么 c 位域中的 unsigned int 值变成有符号值?
【发布时间】:2014-02-07 06:33:28
【问题描述】:
#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?

【问题讨论】:

    标签: c++ bit-fields


    【解决方案1】:

    int 默认已签名,因此 int :2 的范围为 -2 到 1。如果您希望能够存储值 0 到 3,请使用 unsigned int :2。

    【讨论】:

      【解决方案2】:

      第一个是符号位。 对于 2 (10) 第一个是符号 1,所以它的负数。 2 对 10 的赞美你会得到 -2。

      【讨论】:

        猜你喜欢
        • 2011-08-24
        • 1970-01-01
        • 2021-08-27
        • 1970-01-01
        • 1970-01-01
        • 2021-08-07
        • 2013-02-02
        • 1970-01-01
        • 2019-07-11
        相关资源
        最近更新 更多