【发布时间】:2013-06-10 09:36:51
【问题描述】:
谁能解释一下输出,值是如何存储和计算的?
#include<stdio.h>
struct bitfield
{
unsigned f1:1;
unsigned f2:2;
unsigned :3;
unsigned f4:4;
unsigned f5:5;
unsigned f6:6;
unsigned f7:1;
unsigned f8:8;
} bf;
main()
{
bf.f1 = 1;
bf.f2 = 0x3;
bf.f4 = 0xff;
bf.f5 = -4;
bf.f6 = 0377;
printf("%d %d %d %d %d %d", bf.f1, bf.f2, bf.f4, bf.f5, bf.f6, bf.f8);
}
输出:1 3 15 28 63 0
【问题讨论】:
-
我更改了代码的格式以使其更具可读性。
-
有什么需要解释的?这不是一个非常有用的问题。这就像说“1 + 1 = 2——有人能解释一下吗?”。这一切看起来都很明显,所以除非你说出你不明白的部分,否则很难回答这个问题。
-
f1 有 1 位,为 1。f2 有 2 位,可以存储 0x3。 f4 有 4 位(范围 0-15),存储 0xff 将其设置为最大值(15)。 f5 有 5 位,4 = 00100,-4 = 11100(二进制补码),这是二进制等于 28。f6 有 6 位,最大值 = 63。0377(oktal)= 255 dec。所有 6 位设置为 1,因此其值为 63。f8 从未设置。
标签: c++ c struct unsigned bit-fields