补码数的符号扩展

    xiaoxiao2023-10-03  147

    short sx = -12345; /*-12345*/ unsigned short usx = sx; /*53191*/ int x = sx; /*-12345*/ unsigned ux = usx; /*53191*/ printf("sx = %d:\t",sx); show_bytes((byte_pointer) &sx, sizeof(short)); /*此函数博客地址https://mp.csdn.net/postedit/90543468*/ printf("usx = %u:\t",usx); show_bytes((byte_pointer) &usx, sizeof(unsigned short)); printf("x = %d:\t",x); show_bytes((byte_pointer) &x, sizeof(int)); printf("ux = %u:\t",ux); show_bytes((byte_pointer) &ux, sizeof(unsigned)); 在采用补码表示的32位大端机器上运行这段代码时,打印出如下输出: sx = -12345: cf c7 usx = 53191: cf c7 x = -12345: ff ff cf c7 ux = 53191: 00 00 cf c7 -12345的补码表示和53191的无符号表示在十六字长时是一样的,但由于符号扩展-12345是扩展符号位1而53191是扩展符号位0,所以三十二位表示是不同的。

     ps:此文章是学习《深入理解计算机系统》的课堂笔记,上述代码出自《深入理解计算机系统》一书。

     

     

    最新回复(0)