gpt4 book ai didi

c - C 中的位域

转载 作者:太空宇宙 更新时间:2023-11-04 00:24:24 25 4
gpt4 key购买 nike

我有以下代码:

#include <stdio.h>
struct test
{
int x: 2;
int y: 2;
};
int main()
{
test t;
t.x = -1;
printf("%d", t.x);
return 0;
}

这段代码打印出我能理解的-1

如果相同的代码,%d被替换为%x格式说明符,如下所示:

#include <stdio.h>
struct test
{
int x: 2;
int y: 2;
};
int main()
{
test t;
t.x = -1;
printf("%x", t.x);
return 0;
}

输出变成ffffffff

请解释为什么会这样。

最佳答案

当您将您的位字段传递给 printf 时,这是一个参数数量可变的函数,该值会转换为 int。尽管该值只有两位,但其二进制值 11 在二进制补码表示中表示 -1,因此该值被符号扩展为整数 - 1 当它被发送到 printf 时。这是在 32 位系统上以十六进制表示的 0xffffffff

如果您只想看到两位以十六进制形式打印,请将您的位字段设置为无符号。这将确保在打印之前不会执行符号扩展:

#include <stdio.h>
struct test
{
unsigned int x: 2;
unsigned int y: 2;
};
int main()
{
struct test t;
t.x = -1;
printf("%x", t.x);
return 0;
}

这会打印 3 ( demo )。

关于c - C 中的位域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31026471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com