[英]Why the following code in C prints -1?
我期望1作为输出。
#include<stdio.h>
int main(){
struct A{
int a:1;
};
struct A bb;
bb.a=1;
printf("%d",bb.a);
return 0;
}
通过执行int a:1
,您可以将a
设置为1 bit signed int
。 它由1位表示,并在您的实现中采用二进制补码表示,范围为{0,-1}
。 因此,将1
设置为a
将代表值-1
。
附录 :
注意,按照C90
标准,纯int
是带signed int
; 但是当涉及位域时,以下内容成立:
位字段的类型可以为int,unsigned int或signed int。 实现定义是否将纯
int
位域的高位位置视为符号位
二进制补码机上的1位有符号字段只能取值0或-1,可在此处找到它http://publications.gbdirect.co.uk/c_book/chapter6/bitfields.html
您的位字段是大小为1的有符号整数。一个位的唯一有效带符号的值是0( 0
)和-1( 1
),因为最高有效(也是唯一)位被视为符号位。
如果考虑两位值,则可以更清楚地看到它:0( 00
),1( 01
),-1( 11
),-2( 10
)。
如果更改为unsigned int a:1
,则将满足您的期望。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.