java 的与& ,或| ,非~ 运算符计算方法逻辑

以下属于个人理解,也经过测试,如果错误还请谅解,再次温习了大学的基础知识


1  非(~)运算符的计算:

补充说明,

1:最高位为0代表正数,最高位为1的代表负数

	2:已知一个数的补码,求原码的操作分两种情况: 
	(1)如果补码的符号位为“0”,表示是一个正数,所以补码就是该数的原码。 
	(2)如果补码的符号位为“1”,表示是一个负数,求原码的操作可以是:符号位为1,其余各位取
	反,然后再整个数加1。 

举例 int a = 5, 输出的 ~a = -6;

计算原理:5 转化为二进制是 0000 0101,~运算规则是按位取反,那么为 1111 1010,此时仍为补码,是计算机系统的

存储模式,我们需要的结果是需要将补码转化为原码,换算过程:按位取反1000 0101 再整个+1,故原码为 

1000 0110 = -6(最高位为负,二进制转化为十进制为6)

2  与(&)运算符的计算:

正数与正数之间相与,很简单,直接转化为二进制数,按位与即可

正数与负数之间相与:

补充说明:负数的原码 = 原码就是符号位加上真值的绝对值,即用第一位表示符号, 其余位表示值; 

负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.

负数的补码=在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1) 

正数的反码 = 补码 = 原码

demo7-7
原码0000011110000111
反码0000011111111000
补码0000011111111001

举例 int a = 5,int b = -3; 输出的 a&b = 5;

计算流程:5的二进制形式为:0000 0101,(补码)

-3的二进制形式为:1111 1101,(补码:按位取反+1) (计算机是以补码的形式存储,用补码计算)

计算结果为:0000 0101 (正数,结果转化为原码 = 5)

-5的二进制形式为:1111 1011,

-3的二进制形式为:1111 1101,(按位取反+1) (计算机是以补码的形式存储,用补码计算)

计算结果为:1111 1001 (负数,结果转化为原码 (符号位不变,按位取反+1)1000 0111 = -7)


3:或(|)运算符的计算:

经过上面两个与(&)运算和非(~)运算,或运算就小case了

上面第一个例子 5 | (-3)结果就是1111 1101(负数,结果转化为原码 (符号位不变,按位取反+1)1000 0011 = -3





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值