java语言基础回顾(二)--位运算以及原码,反码,补码

原码,反码,补码简介

*原码

  • 二进制的定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
  • 例:通过一个字节表示 +7 原码:0(符号位) 0000111
  • -7原码:1(符号位) 0000111

*反码
正数的反码与原码一样;负数的反码是对其除符号位外逐位取反,1变0,0变1;

*补码
正数的补码与原码一样;负数的补码是它的反码加1求和;
方法:求负数的补码:依照原码求出反码再加1
求负数的补码的原码:补码-1再求出原码

计算机都是以数据的补码进行存储和运算的,所以进行有关于负数运算的时候要注意。必须先求出负数的补码再运算,而正数则不用,因为它的补码是它的本身。

位运算

位运算符的分类以及用法

  1. 与 & 有0则0,表达式两边都为true才true
  2. 或 | 有1则1 ,表达式只要有一边为true就true
  3. 异或 ^ 相同则0,不同则1,表达式两边相反则true
  4. 取反 ~ 按位取反(符号位也需要,和求反码不一样)
  5. 有符号位左移 << a>>b,a向左移动b位,则是a乘以2的b次幂
  6. 有符号位右移 >> 与左移相反,则是a除以2的b次幂
  7. 无符号位右移 >>> 忽略符号位,空位都以0补齐

口诀:
正数取反等于正数加1取负 例11取反等于-12
负数取反等于负数加1取正 例-7取反等于6

注意点:
负数的位运算:
例 :-7&-1
-7的补码: 1 111 1001
-1的补码:1 111 1111
相与:1 111 1001 求出了结果的补码**(注意:答案不是这个,还要求出它的原码)**
1 111 1000 接着求出结果的反码
1 000 0 111 最后是求出它的原码 ,为 -7

面试题

实现两个数值的交换,不能定义第三方变量
异或运算^的特征:一个数异或同一个数两次等于它本身,不变。
在这里插入图片描述
在这里插入图片描述
而开发的时候多使用定义第三方变量的方法:
在这里插入图片描述

在这里插入图片描述


版权声明:本文为qq_34304106原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。