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条)

报告相同问题?