在java日常开发中,肯定会碰到各种锁,我在学习DES加密算的过程过了解到,想要实现DES就得对二进制的源码、补码、反码以及对位运算有所了解,所以写这篇文章做记录,也防止以后自己忘记在来翻阅。
简单补充
网上很多大佬文章都用 5 来举例,这里我也就借鉴下。首先要清楚的是在二级制都是用 0 和 1 来表示数字的,逢二进一。
源码
在二进制中,符号位(左边第一位)的 0 表示正数,1 表示负数。
例如:
5 的二进制数为: 00000101,它的源码为: 00000101;
而 -5 就是将符号位改为 1 来表示,为:10000101。
补码
补码是二进制中常用的表示负数的方法,补码就是将二进制数上所有位数全部取反,在加上 1 。
例如:
5 的二进制数为:00000101,这里要注意的是正数的源码和补码是相同的,所以是他本身;
-5的补码:
对 5 的二进制位取反: 00000101 ------ 11111010;
在进行加 1 : 11111010 + 1 --------- 11111011;
由此得出 -5 的补码为 11111011 ,因为它使可以正确的用来负数的加减运算,所以常用。
反码
反码就好理解了,就是将二进制数的源码符号位不变,将所有取反即可,因为正数是补码和源码是想用的,所以 5 的反码还是: 00000101;而 -5 的反码就为 : 10000101。
总结
在二进制中,源码、补码、反码是常用的表示负数的方法,其中补码较为常用,因为它可以正确的被用来负数的加减操作。其他两种了解,掌握补码即可。