您好、欢迎来到现金彩票网!
当前位置:盛通彩票app下载 > 根编译程序 >

C语言位运算!

发布时间:2019-07-25 19:43 来源:未知 编辑:admin

  C语言位运算!为什么输出的是-1,而不是1?测试了下我把位域长度改为2就不会。个人猜测是不是因为把flag分配的位域长度,最高位被拿出来做符号位了?...

  C语言位运算!为什么输出的是-1,而不是1?测试了下我把位域长度改为2就不会。个人猜测是不是因为把flag分配的位域长度,最高位被拿出来做符号位了?

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  根本问题在于printf中的%d。%d是将对应变量按十进制有符号数输出,而“有符号”就是将对应输出变量的二进制最高位(1或0)扩展到int型的二进制位数,然后转换成十进制输出。你现在的位域是1,那就是最高位和最低位都是1,输出时前面扩展了31个1,成了11111111 11111111 11111111 11111111,这个数刚好是十进制数-1的补码;当位域为2时,输出变量的最高位是0,最低位是1,按上述规则,输出时扩展成了00000000 00000000 00000000 00000001,这个数当然就是十进制数1的补码。可以做个试验:将位域改为2,同时将s.flag也赋值2,那么输出就是-2了。我想应该是这样的……

  C语言位操作运算符 &,,~,^,,是干什么的?

http://dora6.net/genbianyichengxu/843.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有