admin管理员组文章数量:1794759
二进制补码源码转换c++代码十六进制测试转换取反加一结果不正确不需要转换
二进制补码的转换问题
工作中需要的一份数据协议中用到了二进制补码,于是查询关于二进制补码还原的代码… 查到的结果是说正数的结果是其本身,负数需要取反+1,即(b=~a+1,符号位不变)。 要研究详细理论,请自行查询学习。 结果不对! 于是就研究了一下,其实结果就是不需要转换。代码中,直接取出来就可以了。 一下验证过程,可以跳过了… C++测试。
int A777 = -7; __int32 A77 = 0xFFFFFFF9; __int32 A7 = 0xFFFFFFF9; __int32 A = 0xFE08F368;//-32967832 __int32 AA = -32967832; __int32 b = (~A7) | 0x80000000 + 1 ;//-2114515817 printf("%X\\n", A77); printf("%X\\n", A777); printf("%X\\n", A);输出结果: 到这里,看到-7的十六进制表示结果就是二进制补码。 也就是说,所有的负数在计算机中,已经是二进制补码形式存在,不需要转换,至于网站上的转换方法是理论方式,当然也是计算机实现方式,只是对程序员是透明的。 当然还有一处可以验证,就是计算器。 BIN行和Hex行,都是显示的二进制补码,而不是原码。 所以,结论就是,计算机中已经将补码透明化了。
而且,还测试了C#、Java、以及Ubuntu下C++,都是这样的。如果不信,请自行验证。 如有问题,欢迎交流讨论。
版权声明:本文标题:二进制补码源码转换c++代码十六进制测试转换取反加一结果不正确不需要转换 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686573926a83430.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论