Java还在纠结原码、补码和反码?其实So Easy
请注意“或”、“与”、“非”和java中的||、&&、!别弄混淆了,java中的这几个是用来进行逻辑判断的,而我们这里的“或”“与”“异或”这几个是用来计算二进制的,完全没有什么相关,虽然写法有点类似,“或”用一根竖线表示|,与用一个&表示,非用~表示,"异或"用^表示,下面就简单说说他们的作用: 或:在二进制中,两个操作数进行或操作,只要有一个为1,结果就为1,否则就为0;举个例子,-6|3,首先将各自都变为补码,也就是变为(1111 1011)|(0000 0011),根据下图,最后计算的补码为1111 1011,变为原码为1000 0101,对应十进制的-5,所以-6|3的结果就是-5!很简单吧,现在应该知道操作数是什么了吧! ![]()
与:两个操作数同时为1,结果才是1,否则为0; 异或:看这个名字就知道了,两个操作数不同结果就是1,否则为0; 非:就是对自己取反(符号位也要取反),用法如下,因为-6的补码是1111 1010,取反之后的补码0000 0101,对应十进制的5
5.简单练习 如果把上面的都看懂了,理解了那么下面这个就很容易了; 直接说一下这个方法的用处,就是你随便输入一个int类型的数,它都会给你返回一个2的次幂数,比如1,2,4,8,16.32.64等这种数(1等于2的零次幂,也是2的次幂数)
这个方法其实很容易,就是将传进去的int类型的cap首先减一,赋值给n,然后n进行5次无符号右移操作,每次右移之后都和n进行"或"操作,最后判断n如果小于零,就返回1,否则就返回n+1 (编辑:惠州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |