负数的二进制表示及有符号数与无符号数之间的转换

    讲到有符号数与无符号数的转换,首先得说一下数字在计算中的二进制表示。无符号数表示相对简单,直接转换为二进制即可;有符号数则是将最高位作为符号位。所以对于单字节无符号数表示范围为:0~255;有符号数表示范围为:-128~127。
    无符号数表示如下,对于a=3:
1字节表示为:0000 0011
4字节表示为:0000 0000 0000 0000 0000 0000 0000 0011
    有符号数中正数表示方法与无符号数表示方式一样,而在计算机存储中,负数表示并不是简单地将正数二进制最高位用1表示,如符号数1000 0001并不是-1。而是用补码表示,a=-1:
    1字节表示:
    原码:1000 0001
    反码:1111 1110
    补码:1111 1111
    4字节表示:
    原码:1000 0000 0000 0000 0000 0000 0000 0001
    反码:1111 1111 1111 1111 1111 1111 1111 1110
    补码:1111 1111 1111 1111 1111 1111 1111 1111
所以-1在计算机存储中1字节和4字节二进制表示分别为:0xFF,0xFFFFFFFF。
1 无符号数转换为有符号数                                                                             
    看无符号数的最高位是否为1,如果不为1(即为0),则有符号数就直接等于无符号数;如果无符号数的最高位为1,则将无符号数取补码,得到的数就是有符号数。 
    无符号数 a=255,首位为1,表示负数,其余为按位取反,
    单字节表示:1111 1111
    按位取反  :1000 0000
    加1得    :1000 0001
    得到-1;所以无符号数255转换为符号数为-1。
2 有符号数转换为无符号数 
    看有符号数的最高位是否为1,如果不为1(即为0),则无符号数就直接等于有符号数;如果有符号数的最高位为1,则将有符号数取补码,得到的数就是无符号数。
    将符号数-1转换为无符号数过程如下:
              1000 0001
              1111 1110
              1111 1111
    最终结果可得-1转换为无符号数255。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值