gpt4 book ai didi

c - 为什么要为此代码打印 -1,当位域设置为 1 时,我认为它是 1?

转载 作者:行者123 更新时间:2023-12-02 07:23:57 25 4
gpt4 key购买 nike

#include<stdio.h>  
int main()
{
struct byte
{
int one:1;
};

struct byte var = {1}; // statement A
printf("%d", var.one);
return 0;
}

在这里,我想我们已经将整数变量“一”的位内存限制为 1,即;它只能存储 0 和 1,在“语句 A”中,我们用“1”初始化了这个变量,这应该没问题,因为“一个”仍然可以在它的内存中保留一点,但它在控制台上打印 -1!有什么帮助吗?

最佳答案

int 类型定义的位字段是否等同于 signed intunsigned int 是实现定义的。 (这仅适用于位字段;否则 intsigned int 完全相同。)

如果 int one:1; 是有符号的(就像在您的实现中一样),那么那个位就是符号位,唯一可能的值是 0-1。您用于初始化它的值 1,因为它超出范围,被隐式转换-1。 (实际上转换的结果是实现定义的。)

将声明更改为:

unsigned int one:1;

它可以有值 01。位字段通常应显式未签名,除非您确实需要对它们进行签名——在这种情况下,您应该使用 signed int 而不是 int

关于c - 为什么要为此代码打印 -1,当位域设置为 1 时,我认为它是 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36364208/

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