gpt4 book ai didi

c - 将位域成员分配给 char

转载 作者:太空宇宙 更新时间:2023-11-04 04:54:05 26 4
gpt4 key购买 nike

我这里有一些代码使用位集将许多 1 位值存储到一个字符中。

基本上

struct BITS_8 {
char _1:1;
(...)
char _8:1;
}

现在我试图将这些位之一作为参数传递给函数

void func(char bit){
if(bit){
// do something
}else{
// do something else
}
}

// and the call was
struct BITS_8 bits;
// all bits were set to 0 before
bits._7 = 1;
bits._8 = 0;
func(bits._8);

解决方案是在调用函数时单选位:

func(bits._8 & 0x80);

但我一直进入 //do something 因为设置了其他位。我想知道这是否是正确的行为,或者我的编译器是否已损坏。编译器是一种嵌入式编译器,可为飞思卡尔 ASIC 生成代码。

编辑:2 个错误:参数的传递和 bits._8 应该为 0,否则错误将毫无意义。

澄清

我对标准对作业的规定感兴趣

struct X{
unsigned int k:6;
unsigned int y:1;
unsigned int z:1;
}

X x;
x.k = 0;
x.y = 1;
x.z = 0;

char t = X.y;

现在 t 应该包含 1 还是 b00000010

最佳答案

我不认为你可以将一个 1 位 char 设置为 1。剩下的一位决定它是否被签名,所以你最终0-1 的区别。

你想要的是一个unsigned char,来隐藏这个签名位。然后你可以只使用 1 和 0。

关于c - 将位域成员分配给 char,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11313932/

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