将8位的有符号数强转64位的无符号数的坑

在大数据分析中遇到数值异常增大问题,根源在于8位有符号数通过movsx指令扩展到64位无符号数时,高58位被符号位填充。理解补码表示负数和movsx、movzx指令的区别。解决方案是先将8位有符号数转换为无符号类型,再进行64位扩展,确保高位被零填充。
摘要由CSDN通过智能技术生成

今天在做公司大数据分析时遇到个坑,某些数据莫名其妙变得特别大:


 最终定位出原因在这个强转这里


当8位有符号数扩展为64位无符号数时,底层汇编实际上使用的是movsx带符号扩展指令,意思就是扩展的那些位都用符位来补全,这里就造成了value的高58位全为1,从而值异常大

我们再来做个简单测试:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值