gxpyzg 2018-10-05 06:30 采纳率: 71.4%
浏览 1023
已采纳

int有符号的整型数溢出有什么规律吗??小白好难过...

int8_t x = 0xd3

        如果我要写出x的二进制表示,按道理0xd3=211,应该表示为011010011,如果舍掉最高位的0变成11010011.就是-45,正好我用char试了一下就是-45.

[ 图片说明

        那int8_t z=-134也应该溢出了,我算了算应该输出122(01111010)但是我用char算了一下它输出了-134??

![ 图片说明
为什么呢??

  • 写回答

2条回答 默认 最新

  • threenewbee 2018-10-05 06:38
    关注

    int8可以表示 -128~127
    二进制
    00000000 表示0
    00000001 表示1
    00000010 表示2
    00000011 表示3
    ...
    01111110 表示126
    01111111 表示127
    10000000 表示 -128
    10000001 表示 -127
    10000010 表示 -126
    10000011 表示 -125
    10000100 表示 -124
    ...
    11111011 表示 -5
    11111100 表示 -4
    11111101 表示 -3
    11111110 表示 -2
    11111111 表示 -1
    -1 + 1 = 0
    也就是 11111111 + 1 = 100000000。那么1去哪里了,溢出了,剩下的就是00000000=0

    总结下,0就是0,正数就是正数,负数就是反码+1
    比如
    11010011的符号位1,剩下的是1010011,反码(0变1,1变0)就是0101100,44。连起来-44,再-1=-45

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试