亦楠_把一件事做好 2016-03-23 02:30 采纳率: 33.3%
浏览 3089

c语言中按位取反的问题

我想要得到111001(二进制),想通过111000与000001按位或得到,

我用~0<<3,想得到最后三位是0,其余位为1,可是结果
printf("%i\n",~0<<3)输出为-8,不明白为什么这里
虽然0取反为-1,也就是全为1的二进制序列,可左移后为什么是-8

还有如何得到最后一位为1,其余全为0的二进制,
我用
~(~0<<(sizeof(0)*8-1))得到的值特别大,根本不是1,请教一下

  • 写回答

1条回答

  • JunhuanChen 2016-03-23 03:56
    关注

    #i是有符号整数,这里的问题有两个,你应该用int8而不是完整的int32,~0左移导致的问题是符号位变1,则为负数,二进制的负数和正数读法是反过来的,你稍微理解一下就清除了,至于要得到你的结果你可以直接或一个无符号的1

    评论

报告相同问题?

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况