java数字取反_java中源码反码补码与取反的理解

数字在计算机里是按照二进制来表示的。

箭头朝哪边就是朝哪边移动

补码,反码,和源码

负数原码转化为补码:符号位不变,数值位按位取反,末尾加一。

负数补码转化为原码:符号位不变,数值位按位取反,末尾加1。

负数反码转化为补码:末尾加1。

在Java中~符号是按位取反,例如,~5=-6。-5=4. 快速计算:一般~可以直接用(a+1)算,正数负数均可

思路:

是按位取反运算,与反码是不同的,

反码法规定,正数原反补码相同,负数的反码为原码除符号位以外取反。

而按位取反运算中:正数取反是先将初始数值转换成二进制数(6==》00000110),再对二进制数的每一位取反:即将0变为1、将1变为0。(00000110==》11111001),得到的是最终结果的补码,要转换为最终结果的原码则需再次取补码,(此处一种逆着算为11111001-1除符号位全取反10000111即为-7,另一种为11111001==》10000110+1==》10000111也为-7)就能得到计算结果。

负数取反:先将初始数值转换成二进制数(以-6为例,10000110),再取得二进制数的补码(10000110==》11111001+1==》11111010),之后对补码的每一位取反:即将0变为1、将1变为0(11111010==》00000101即为5)。得到的是最终结果的补码(由于正数的原码、反码、补码相同,该数即为原码),要转换为最终结果的原码则需再次取补码,就能得到计算结果。

注:在计算机中,运算都是通过补码进行计算的,这个点也是今晚我一直想不到的点,以至混淆了概念,胡乱取反。

计算机中的信息都是以二进制形式表示的,数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负)。

讲一下反码补码原码的使用。

通过讲一个例子

3取反以后的值是多少

注意一下取反和反码是有区别的。

int本来是32位因为为了简单,假设int是由8位组成的。

而且最高位表示的正负

0代表正

1代表负

取反以后得到的是补码

同时通过符号位得知是负数

负数的反码+1是补码

所以反码=补码-1

所以可以得到取反以后的值是-4c60be24077907a2fb0c433bc5b8adf16.pnghttps://www.zhihu.com/video/1207753927237832704

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值