今天看到一个由反码求原码的过程,一直很困惑。
先了解原码,反码,补码的基本概念
1.正数三者相同。
2.负数如下。
原码:正常二进制32位换算,比如(-1)的原码 10000000 000000000 00000000 00000001,其中负数第一位为1,整数为0,理所当然1的原码为00000000 000000000 00000000 00000001。
反码:忽视第一位1/0的符号位,其他为按位取反,就是 是0换成1,是1换成0。仍以(-1)举例,为11111111 11111111 11111111 11111110。
补码:为反码+1:11111111 11111111 11111111 11111111(-1的)。
看过概念,想当然是原码则是补码取反减一。
11111111 11111111 11111111 11111111取反是 10000000 00000000 00000000 00000000,
而实际原码为10000000 000000000 00000000 00000001。
因此,切实可靠的方法就是补码取反+1。
果然,你以为就是你以为吗?天真,不禁感叹之前的设计者如何想出来的,大佬。