java位于算——一个测试搞懂位运算
生活随笔
收集整理的這篇文章主要介紹了
java位于算——一个测试搞懂位运算
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
說明
我們平時在看JDK源碼的過程中會看到開發者會大量的使用移位運算符,那么移位運算是怎么計算的呢?通過下文的測試代碼就可以知道了。
測試代碼
package com.leo.demo.othertest;/*** @ClassName: ByteDemoTest* @Description: 關于位運算的測試* <p>* 移位運算符* 把整數的二進制位進行左移或右移* 按位左移 << ,右側補0,* 按位右移 >> ,左側補符號位(最高位)* 無符號按位右移 >>> , 左側補0* @Author: leo825* @Date: 2019-10-09 14:36* @Version: 1.0*/ public class ByteDemoTest {public static void main(String[] args) {int xx = 20;/*** xx在內存中的二進制形式為:* 0000 0000 0000 0000 0000 0000 0001 0100* 左移1位為:xx << 1* 0000 0000 0000 0000 0000 0000 0010 1000**/System.out.println(xx + " << 之后為: " + (xx << 1));//即20*2=40/*** xx在內存中的二進制形式為:* 0000 0000 0000 0000 0000 0000 0001 0100* 右移1位為:xx >> 1* 0000 0000 0000 0000 0000 0000 0000 1010**/System.out.println(xx + " >> 之后為: " + (xx >> 1));//即20/2=10xx = -20;/*** xx在內存中的二進制形式為:* 1111 1111 1111 1111 1111 1111 1110 1100* 左移1位為:xx << 1* 1111 1111 1111 1111 1111 1111 1101 1000* 負數補碼轉原碼:補碼的補碼就是原碼1000 0000 0000 0000 0000 0000 0010 1000*/System.out.println(xx + " << 之后為: " + (xx << 1));/*** xx在內存中的二進制形式為:* 1111 1111 1111 1111 1111 1111 1110 1100* 右移1位為:xx >> 1* 1111 1111 1111 1111 1111 1111 1111 0110* 負數補碼轉原碼:補碼的補碼就是原碼1000 0000 0000 0000 0000 0000 0000 1010*/System.out.println(xx + " >> 之后為: " + (xx >> 1));xx = 20;/*** xx在內存中的二進制形式為:* 0000 0000 0000 0000 0000 0000 0001 0100* 無符號移一位:xx>>>1* 0000 0000 0000 0000 0000 0000 0000 1010*/System.out.println(xx + " >>> 之后為: " + (xx >>> 1));xx = -20;/*** xx在內存中的二進制形式為:* 1111 1111 1111 1111 1111 1111 1110 1100* 無符號移一位:xx>>>1* 0111 1111 1111 1111 1111 1111 1111 0110*/System.out.println(xx + " >>> 之后為: " + (xx >>> 1));} }下面是運行結果:
20 << 之后為: 40 20 >> 之后為: 10 -20 << 之后為: -40 -20 >> 之后為: -10 20 >>> 之后為: 10 -20 >>> 之后為: 2147483638總結
以上是生活随笔為你收集整理的java位于算——一个测试搞懂位运算的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring小知识——profile配置
- 下一篇: 简单示例立马搞懂Java日期格式中yyy