#505 有符号扩展-sign extension   concept     about a year ago (owner) Document
 uint16_t sign_extend(uint16_t x, int bit_count) {
     if ((x >> (bit_count - 1)) & 1) {
         x |= (0xFFFF << bit_count);
     }
     return x;
 }
代码解释:
  • 功能:将不足16位的数字执行符号扩展,至16位
  • 参数x指定十进制数字,bit_count指定该十进制数的二进制位数。比如:x=15,bit_count=5,即二进制序列(01111)表示的15
  • x >> (bit_count - 1)求出二进制序列的符号位
  • 符号位&1判断符号位是否为1
  • 符号位为1时,0xFFFF << bit_count为全1的16位二进制序列的低位留足bit_count个0
  • x |= (0xFFFF << bit_count)将x的bit_count位二进制序列或到预留的低位中去。至此完成有符号扩展