C语言位段问题(求高手解答)

happy08god 2012-03-19 03:35:58
struct {
int a:2;
}x;


x.a = 1;

printf(" x.a = %d \n",x.a);

x.a += 1;

printf(" x.a = %d \n",x.a);


请问: 2次打印出x.a的值分别是? 对于第2个值如何理解?
...全文
140 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
happy08god 2012-03-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wyjxhl97 的回复:]

引用 1 楼 nice_cxf 的回复:
大概是1,-2把
有符号数最高位是符号位

++
就是1,-2。
因为a占2bit,并且因为是int a:2;
所以a = 1 01
a = -2 10
与C/C++ code
char b;
b = 128;
printf(" b = %d \n",b);
原理一样
这个结果b = -128 ……
[/Quote]



明白了,原来如此,是因为有符号数最高位是符号位 。 可以通过%x的方式打印出
内存里面的值,如对-2来说,0xfffffffe,确定是负数后,求其补码,为0x00000010 ,又由于
是负数,所以为-2。



谢谢楼上二位!! 结贴给分!!
WYJXHL97 2012-03-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 nice_cxf 的回复:]
大概是1,-2把
有符号数最高位是符号位
[/Quote]
++
就是1,-2。
因为a占2bit,并且因为是int a:2;
所以a = 1 01
a = -2 10
	char b;
b = 128;
printf(" b = %d \n",b);
原理一样
这个结果b = -128 10000000
nice_cxf 2012-03-19
  • 打赏
  • 举报
回复
大概是1,-2把
有符号数最高位是符号位

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧