补码数的符号扩展

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值