admin管理员组

文章数量:1794759

二进制补码源码转换c++代码十六进制测试转换取反加一结果不正确不需要转换

二进制补码源码转换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++,都是这样的。如果不信,请自行验证。 如有问题,欢迎交流讨论。

本文标签: 补码不需要不正确源码代码