首页 > 编程知识 正文

求整数绝对值的代码,java 取绝对值

时间:2023-05-04 02:54:10 阅读:24572 作者:2567

可以通过以下位运算得到整数的绝对值

公共in tabs (inta ) {

返回(a (a31 ) ) ^ ) a31; //前半-1或0,后半相反

}

在a为正的情况下,向右移位31位

a31=0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

在a为负数的情况下,向右移位31位

a31=111111111111111111111111111111111111111111111111

因此,很明显,a为正数时公式成立,a为负数时是求a补数过程的逆过程

求补数的过程如下

正数的原码---求逆得到补数---再加1得到补数

举个-1试试

-1的绝对值源代码

00000000 00000000 00000000 00000001

-----------------

先求反。 这里求反可以用异或得到。 也就是说

00000000 00000000 00000000 00000001

^

11111111 11111111 11111111 11111111

得到反码

11111111 11111111 11111111 11111110

-----------------

再加1得到补数

11111111 11111111 11111111 11111110

00000000 00000000 00000000 00000001

补码

11111111 11111111 11111111 11111111

所以-1的补码是

所以-1的补码是

现在把这个过程倒过来就行了

这里,补充-1得到反码,-1在计算机中是(-1 )

11111111 11111111 11111111 11111111

1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

得到反码

1111111111111111111111111111111111111111111----最高位过境直接丢失

-----------------

将反码转换为原始代码是通过异或操作获得的

11111111 11111111 11111111 11111110

^

1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

拿到原码

00000000 00000000 00000000 00000001

因此,-1的源代码为0000000000000000000000000000000000000000001,其绝对值为-1,即1。

从上面的推送过程可以看出整数的绝对值相等

(a ) a31 ) (^ (a31 ) ) ) ) ) )。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。