目录
ID:HL_5461
引言
符号扩展是指将一个短数据变为长数据,比如char变int,int变long。那么多出来的位要如何填充?这就是本文要讨论的问题。
本篇主要分为定点整数和定点小数讨论。以8位变16位为例
一、定点整数
1.正整数
以0,001 0100为例:
扩展前 | 扩展后 | |
原码 | 0,001 0100 | 0,000 0000 0001 0100 |
反码 | 0,001 0100 | 0,000 0000 0001 0100 |
补码 | 0,001 0100 | 0,000 0000 0001 0100 |
正数原反补一样,都是高位补0。
2.负整数
以原码为1,001 0100为例:
扩展前 | 扩展后 | |
原码 | 1,001 0100 | 1,000 0000 0001 0100 |
反码 | 1,110 1011 | 1,111 1111 1110 1011 |
补码 | 1,110 1100 | 1,111 1111 1110 1100 |
在符号位和数值位之间,原码添0,反码、补码添1。
二、定点小数
1.正小数
以0.001 0100为例:
扩展前 | 扩展后 | |
原码 | 0.001 0100 | 0.001 0100 0000 0000 |
反码 | 0.001 0100 | 0.001 0100 0000 0000 |
补码 | 0.001 0100 | 0.001 0100 0000 0000 |
正数原反补一样,都是低位补0。(可类比10进制小数,如0.12 --> 0.1200)
2.负整数
以原码为1.001 0100为例:
扩展前 | 扩展后 | |
原码 | 1,001 0100 | 1.001 0100 0000 0000 |
反码 | 1,110 1011 | 1.110 1011 1111 1111 |
补码 | 1,110 1100 | 1.110 1100 0000 0000 |
反码末尾添1,原码、补码添0。
总结
定点整数的符号扩展:
在原符号位和数值位中间添加新位,正数都添0,负数原码添0,负数反、补码添1。
定点小数的符号扩展:
在原符号位和数值位后面添加新位,正数都添0,负数原、补码添0,负数反码添1。
若有错误,欢迎大家批评斧正!