【发布时间】:2019-07-11 13:04:10
【问题描述】:
在编写代码时,我在代码中观察到一件事,它与位域值与负整数的比较有关。
我有一个大小为一位的无符号结构成员和一个无符号整数。当我将负值与 unsigned int 变量进行比较时,我得到预期结果为 1,但是当我将结构成员与负值进行比较时,我得到相反的结果为 0。
#include <stdio.h>
struct S0
{
unsigned int bit : 1;
};
struct S0 s;
int main (void)
{
int negVal = -3;
unsigned int p = 123;
printf ("%d\n", (negVal > p)); /*Result as 1 */
printf ("%d\n", (negVal > s.bit));/*Result as 0 but expected 1 */
return 0;
}
我的疑问是,如果我将负值与 unsigned int 进行比较,那么就会发生平衡(隐式类型转换)。但是,如果我比较 unsigned int 的结构成员,为什么没有发生隐式类型转换。如果我错过了位域的任何基础知识,请纠正我?
【问题讨论】:
-
我在 MSVC 上都收到了
1。你用的是什么编译器? -
gcc 我正在使用...
-
gcc 将
s.bit提升为 int,(-3 > 0)也将值设为 0 -
这是一个全局变量,所以默认值为零
标签: c bit-fields