【java】取反 原码 反码 补码

【java】取反 原码 反码 补码

首先要明确,在计算机中,整数是以补码形式的存储并参与运算,计算机中的没法直接做减法的,它的减法是通过加法来实现的,可以发现一个正数的原码和它相反数的原码相加不等于0,所以必须引进反码和补码的概念。
一.原码
1>.正数的原码就是它的本身  假设使用一个字节存储整数,整数10的原码是:0000 1010
2>.负数用最高位是1表示负数  假设使用一个字节存储整数,整数-10的原码是:1000 1010

二.反码
1>.正数的反码跟原码一样  假设使用一个字节存储整数,整数10的反码是:0000 1010
2>.负数的反码是负数的原码按位取反(0变1,1变0),符号位不变  假设使用一个字节存储整数,整数-10的反码是:1111 0101

三.补码
1>.正数的补码和原码一样  假设使用一个字节存储整数,整数10的补码是:0000 1010(第三次强调:这一串是10这个整数在计算机中存储形式)
2>.负数的补码是负数的反码加1假设使用一个字节存储整数,整数-10的补码是:1111 0110(第三次强调:这一串是-10这个整数在计算机中存储形式)

四.取反
在取反操作时,是将数字的补码,进行取反,若符号位是1,则取反后减一,再取反,若符号位是0,则直接取反公式**:~a=-(a+1)**

有这么一个题:1.求~9的结果是什么
解:9的二进制数表示 0000 1001
9的原码 0000 1001
9的反码 0000 1001
9的补码 0000 1001
按位取反操作 1111 0110
变为原码先减一 1111 0101
再取反 1000 1010 (-10)2. 求~-9的结果
-9的二进制数表示 1000 1001
-9的原码 1000 1001
-9的反码 1111 0110
-9的补码 1111 0111
按位取反操作 0000 1000
变为原码 0000 1000 (8) 因为正数的补码、反码、原码都是一个样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值