gpt4 book ai didi

c - 请解释位域 1 的输出

转载 作者:行者123 更新时间:2023-11-30 18:25:35 26 4
gpt4 key购买 nike

#include<stdio.h>

int main(){

struct value
{
int bit1:1;
int bit2:4;
int bit3:4;
}
bit ={1,2,2};
printf("%d %d %d \n",bit.bit1,bit.bit2,bit.bit3);

return 0;
}

输出:-1 2 2

嗨,我无法理解结构位域。负值是如何产生的。

最佳答案

int bits:2;

可以存储 00(0), 01(1), 10(-2), 11(-1) *假设有符号的 2 补码系统

unsigned int bits:2;

可存储00(0)、01(1)、10(2)、11(3)

两种类型可以表示的位表示相同,但​​解释不同。

您正在使用:1,因此它可以存储0或-1,因此输出为负数。您正在尝试存储 1,它不能用 int :1 表示,因此输出令人惊讶。重点是,不要这样做。

结论几乎总是对位域成员使用unsigned。将结构重写为:

struct value
{
unsigned int bit1:1;
unsigned int bit2:4;
unsigned int bit3:4;
};

关于c - 请解释位域 1 的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26901739/

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