原码反码补码

原码反码补码

  1. 为什么计算机底层计算需要使用补码?

    • 计算机是不能直接做减法运算的,因为普通电脑硬件中没有减法器,不需要额外的增加硬件电路制造难度,减法器无需存在。但可以优雅的转换成减法。

    • 例如:【10 - 7】可以转换成【10 + (-7)】,就这么简单。计算机的脑袋没有减法概念,不代表没有负数的概念。

位运算-基本位运算符

  1. 位运算和算术运算符的效率谁高呢?

    • 位运算效率高。

    • 在系统中运算是以二进制的形式进行,相比来说俩个二进制数相乘运算比移位运算慢一些。

  2. 位运算符中的&和|,同逻辑运算符中&和|有何区别?

    • 两者之间没有任何联系,却有相似之处。

    • 位运算中:&有0则0,|有1则1。

    • 逻辑运算符中:&有false则false,|有true则true。

位运算-位移运算符

    • 说出最高效的2 * 8的实现方式?

      • 8 << 1 或 2 << 3  或  4 << 2,其中效率最高为8<<1,因为它的操作,仅移动一位。

  1. 说出3种不同的位移运算符,以及他们各自的特点?

    • .>> : 将二进制数据整体,向右移动。 高位按符号位补位。

    • .>>> : 将二进制数据整体,向右移动。 高位不论正负全部补0。

    • .<< : 将二进制数据整体,向左移动。 低位补0。

位运算-位移运算符思考

  1. -7 >> 2和-7 >>> 2运算的结果会相同吗?

     -7 >> 2 = -2
     1000 0000 0000 0000 0000 0000 0000 0111 = -7    源码
     1111 1111 1111 1111 1111 1111 1111 1000         反码
     1111 1111 1111 1111 1111 1111 1111 1001         补码

2 1111 1111 1111 1111 1111 1111 1111 1110 补码 1111 1111 1111 1111 1111 1111 1111 1101 反码 1000 0000 0000 0000 0000 0000 0000 0010 = -2 源码 8 >> 2 = 2 0000 0000 0000 0000 0000 0000 0000 1000 = 8 源码 2 0000 0000 0000 0000 0000 0000 0000 0010 = 2 -7 >>> 2 = 1073741822 1000 0000 0000 0000 0000 0000 0000 0111 = -7 源码 1111 1111 1111 1111 1111 1111 1111 1000 反码 1111 1111 1111 1111 1111 1111 1111 1001 补码 2 0011 1111 1111 1111 1111 1111 1111 1110 补码/源码

 ​

数据交换

  1. 什么叫数据交换?

    • 就是将两个变量中的数据值交换。

  2. 不使用第三方变量,能不能进行数据交换?

需求:完成下面案例。

 // 定义数组
 int[] arr = {1,2,3,4,5,6};
 // 遍历数组,分别用start和end两个变量指向首位的元素位置
 // 然后每交换一次,start++,end--,直到start >= end结束
 for (int start = 0,end = arr.length-1; start < end; start++,end--) {
   // 数据交换
   int temp = arr[start];
   arr[start] = arr[end];
   arr[end] = temp;
 }
 // 打印数组
 for (int i = 0; i < arr.length; i++) {
   System.out.print(arr[i] + " ");
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值