负数的⼆进制表⽰及有符号数与⽆符号数之间的转换
负数二进制补码运算法则讲到有符号数与⽆符号数的转换,⾸先得说⼀下数字在计算中的⼆进制表⽰。⽆符号数表⽰相对简单,直接转换为⼆进制即可;有符号数则是将最⾼位作为符号位。所以对于单字节⽆符号数表⽰范围为: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。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。