有符号与无符号数之间赋值的截断和扩展

发布时间 2023-04-23 14:58:45作者: VincentZJ

长位宽赋值给短位宽的截断问题

  对于长给短,无论两个操作数有无符号,直接截断高位,直接赋值;

  赋值完成后,左操作数表示的实际数值要根据左操作数有无符号来判定。如果左操作数是无符号数,直接转换为10进制,如果是有符号数,如果最高位不是1,就说明是正数,直接转十进制,如果最高位是1,那么就按位取反加1,再将最高位换成1,表示成负数。

短位宽赋值给长位宽的扩展问题

  对于短给长,具体扩展是1还是0,完全取决于右操作数:

    1.右操作数是无符号数,则无论左侧是什么类型,高位都扩展0;

    2.右操作数是有符号数,则需要看右操作数的符号位,按照右操作数的符号位扩展。

    3.位宽扩展后左操作数是无符号数,就直接转换成十进制数值;如果是有符号数,如果最高位不是1,就说明是正数,直接转十进制,如果最高位是1,那么就按位取反加1,再将最高位换成1,表示成负数。

    4.需要注意的是,有符号数赋值给无符号数会出现数据错误的情况,需要避免这种情况。