繁体   English   中英

为什么C中的以下代码显示-1?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM