位運算及進位轉換

来源:https://www.cnblogs.com/-andrea/archive/2022/10/08/16770617.html
-Advertisement-
Play Games

位運算及進位轉換 1.1 標識符的命名規則和規範 1.1.1 標識符概念 Java對各種變數、方法和類等命名時使用的字元序列稱為標識符 凡是自己可以起名字的地方都叫做標識符 int num = 88; 1.1.2 標識符的命名規則 由26個英文字母大小寫,0-9,_或$組成 不可以以數字開頭。int ...


位運算及進位轉換

目錄

1.1 標識符的命名規則和規範

1.1.1 標識符概念

  • Java對各種變數、方法和類等命名時使用的字元序列稱為標識符
  • 凡是自己可以起名字的地方都叫做標識符 int num = 88;

1.1.2 標識符的命名規則

  • 由26個英文字母大小寫,0-9,_或$組成
  • 不可以以數字開頭。int 3ab = 1; //錯誤
  • 不可以使用關鍵字和保留字。但能包含關鍵字和保留字
  • Java中嚴格區分大小寫,長度無限制。int totalNum = 10; int n = 90;
  • 標識符1不能包含空格。 int a b = 10;//錯誤

1.1.3 練習(判斷變數名是否正確)

 abc      //ok
 abc123   //ok
 1abc     //no 不能以數字開頭
 a-h      //no 不能用-
 a h      //no 不能有空格
 s$3      //ok
 class    //no 不能使用關鍵字
 int      //no 不能使用關鍵字    
 public   //no 不能使用關鍵字
 double   //no 不能使用關鍵字
 static   //no 不能使用關鍵字
 goto     //no 不能使用保留字
 stu_name //ok             

1.1.4 標識符命名規範

1)包名:多單片語成時所有字母都小寫:aaa.bbb.ccc //比如: com.hsp.com

2)類名、介面名:多單片語成時,所有單詞首字母大寫:XxxYyyZzz[大駝峰] //比如:TankShotGame

3)變數名、方法名:多單片語成時,第一個單詞首字母小寫,第二個單詞開始每個單詞首字母大寫:xxxYyyZzz[小駝峰,簡稱 駝峰法] //比如:tankShotGame

4)常量名:所有字母都大寫。多單詞時每個單詞用下劃線連接:XXX_YYY_ZZZ 比如:定義一個所得稅率 TAX_RATE

1.2 關鍵字

關鍵字的定義和特點(不用背

定義:被Java語言賦予了特殊含義,用做專門用途的字元串(單詞)

特點:關鍵字中所有的字母都為小寫

用於定義數據類型的關鍵字

class interface enum byte short
int long float double char
boolean void

用於定義數據類型值的關鍵字

true false null

用於定義流程式控制制的關鍵字

if else switch case default
while do for break continue
return

用於定義訪問許可權修飾符的關鍵字

private protected public

用於定義類、函數、變數修飾符的關鍵字

abstract final static synchronized

用於定義類與類之間的關鍵字

extends implements

用於定義建立實例及引用實例,判斷實例的關鍵字

new this super instanceof

用於異常處理的關鍵字

try catch finally throw throws

用於包的關鍵字

package import

其他修飾符的關鍵字

native strictfp transient volatile assert

1.3 保留字

1.3.1 介紹

Java保留字:現有Java版本尚未使用,但以後版本可能會作為關鍵字使用。自己命名標識符要避免使用這些保留字byValue、cast、future、generic、inner、operator、outer、rest、var、goto、const。

1.4 鍵盤輸入語句

1.4.1 介紹

在編程中,需要接收用戶輸入的數據,就可以使用鍵盤輸入語句來獲取。Input.java,需要一個掃描器(對象),就是Scanner。

1.4.2 步驟

1)導入該類的所在包,java.util.*

2)創建該類對象(聲明對象)

3)調用裡面的功能

1.4.3 案例演示

要求:可以從控制台接收用戶信息,【姓名,年齡,薪水】

import java.util.Scanner;

public class Input {
    public static void main(String[] args) {
       /*
            步驟:
              1.導入Scanner類 所在的包
              2.創建Scanner對象,new創建一個對象
              3.接收用戶輸入,使用相關方法
        */
        Scanner myScanner = new Scanner(System.in);
        System.out.println("請輸入姓名:");
        String name = myScanner.nextLine();//接收用戶輸入的字元串
        System.out.println("請輸入年齡:");
        int age = myScanner.nextInt();//接收用戶輸入的年齡
        System.out.println("請輸入薪水");
        double sal = myScanner.nextDouble(); //接收用戶輸入的薪水
        System.out.println("人的信息如下:");
        System.out.println("名字=" + name + " 年齡=" + age + " 薪水=" + sal);
    }
}

1.5 進位(程式員的基本功)

1.5.1 進位介紹

對於整數,有四種表示方式:

二進位:0,1。滿2進1,以0b或0B開頭

十進位:0-9。滿10進1

八進位:0-7。滿8進1,以數字0開頭表示

十六進位:0-9 及 A(10)-F(15)。滿16進1,以0x或0X開頭表示,此處的A-F不區分大小寫。

1.5.2 演示四種進位

public class BinaryTest {
    public static void main(String[] args) {
        //n1 二進位
        int n1 = 0b1010;
        //n2 十進位
        int n2 = 1010;
        //n3 八進位
        int n3 = 01010;
        //n4 十六進位
        int n4 = 0x1010;
        System.out.println("n1=" + n1);
        System.out.println("n2=" + n2);
        System.out.println("n3=" + n3);
        System.out.println("n4=" + n4);
        System.out.println(0x23A);
    }
}

1.5.3 進位的圖示

十進位 十六進位 八進位 二進位
0 0 0 0
1 1 1 1
2 2 2 10
3 3 3 11
4 4 4 100
5 5 5 101
6 6 6 110
7 7 7 111
8 8 8 1000
9 9 11 1001
10 A 12 1010
11 B 13 1011
12 C 14 1100
13 D 15 1101
14 E 16 1110
15 F 17 1111
16 10 20 10000
17 11 21 10001

1.5.4 進位的轉換(基本功)

進位轉換的介紹
  • 第一組

    1)二進位轉十進位

    2)八進位轉十進位

    3)十六進位轉十進位

  • 第二組

    1)十進位轉二進位

    2)十進位轉八進位

    3)十進位轉十六進位

  • 第三組

    1)二進位轉八進位

    2)二進位轉十六進位

  • 第四組

    1)八進位轉二進位

    2)十六進位轉二進位

1.6 其他進位轉十進位

1.6.1 二進位轉十進位

規則:從最低位(右邊)開始,將每個位上的數提取出來,乘以2的(位數-1)次方,然後求和。

案例:請將0b1011轉成十進位的數

0b1011 = 1 * 2⁰ + 1 * 2¹ + 0 * 2² + 1 * 2³ = 1 + 2 + 0 + 8 = 11

1.6.2 八進位轉十進位

規則:從最低位(右邊)開始,將每個位上的數提取出來,乘以8的(位數-1)次方,然後求和。

案例:請將0234轉成十進位的數

0234 = 4 * 8⁰ + 3 * 8¹ + 2 * 8² = 4 + 24 + 128 = 156

1.6.3 十六進位轉十進位

規則:從最低位(右邊)開始,將每個位上的數提取出來,乘以16的(位數-1)次方,然後求和。

案例:請將 0x23A 轉成十進位的數

0x23A = 10 * 16⁰ + 3 * 16¹ + 2 * 16² = 10 + 48 + 512 = 570

小練習:請將

0b 1 1000 1100 轉成 十進位

1 * 2² + 1 * 2³ + 1 * 2⁷ + 1 * 2⁸ = 256 + 128 + 8 + 4 = 396

0 2456 轉成十進位

6 * 8⁰ + 5 * 8¹ + 4 * 8² + 2 * 8³ = 6 + 40 + 256 + 1024 = 1326

0x A45 轉成十進位

5 * 16⁰ + 4 * 16¹ + 10 * 16² = 5 + 64 + 2560 = 2629

1.7 十進位轉其他進位

1.7.1 十進位轉二進位

規則:將該數不斷除以2,直到商為0為之,然後將每步得到的餘數倒過來,就是對應的二進位。

案例:請將 34 轉成二進位 = 0B00100010

1.7.2 十進位轉八進位

規則:將該數不斷除以 8,直到商為 0 為止,然後將每步得到的餘數倒過來,就是對應的八進位。

案例:請將 131 轉成八進位 => 0203

1.7.3 十進位轉十六進位

規則:將該數不斷除以 16,直到商為 0 為止,然後將每步得到的餘數倒過來,就是對應的十六進位。

案例:請將 237 轉成十六進位 => 0xED

小練習:

123 轉成 二進位 => 0b 111 1101

678 轉成 八進位 => 0 1246

8912 轉成 十六進位 => 0x 22D0

1.8 二進位轉八、十六進位

1.8.1 二進位轉八進位

規則:從低位開始,將二進位數每三位一組,轉成對應的八進位數即可。

案例:請將 ob11010101 轉成八進位

ob11(3)010(2)101(5) => 0325

1.8.2 二進位轉十六進位

規則:從低位開始,將二進位數每四位一組,轉成對應的十六進位數即可。

案例:請將 ob11010101 轉成十六進位

ob1101(D)0101(5) = 0xD5

課堂練習:請將

0b11100101 轉成 八進位

0b1110010110 轉成 十六進位

1.9 八、十六進位轉二進位

1.9.1 八進位轉二進位

規則:將八進位數每 1 位,轉成對應的一個 3 位的二進位數即可。

案例:請將 0237 轉成二進位

02(010)3(011)7(111) = 0b10011111

1.9.2 十六進位轉二進位

規則:將十六進位數每 1 位,轉成對應的 4 位的一個二進位數即可。

案例:請將 0x23B 轉成二進位

0x2(0010)3(0011)B(1011) = 0b001000111011

課堂練習:請將

01230 轉成 二進位

0xAB29 轉成二進位

1.10 原碼、反碼、補碼(重點 難點)

1.10.1 二進位在運算中的說明

1)二進位是逢2進位的進位制,0、1是基本算符。
2)現代的電子電腦技術全部採用的是二進位,因為它只使用0、1兩個數字元號,非常簡單方便,易於用電子方式實現。電腦內部處理的信息,都是採用二進位數來表示的。二進位(Binary) 數用0和1兩個數字及其組合來表示任何數。進位規則是"逢2進1",數字1在不同的位上代表不同的值,按從右至左的次序,這個值以二倍遞增。

1.10.2 原碼、反碼、補碼要點

對於有符號的來說:

1)二進位的最高位是符號位:0表示正數,1表示負數(口訣:0->0,1->-[0倒過來還是0,1倒過來變成負數])

2)正數的原碼,反碼,補碼都一樣(三碼合一)

3)負數的反碼 = 原碼符號位不變,其他位按位取反(0變1,1變0)

4)負數的補碼 = 負數的反碼 + 1,負數的反碼 = 負數的補碼 - 1

5)0的反碼,補碼都是0

6)Java沒有無符號數,換言之,Java中的數都是有符號的

7)在電腦運算的時候,都是以補碼的方式來運算

8)當我們看運算結果的時候,要看他的原碼(重點)

1.12 位運算

1.12.1 簡單思考題

  • 請看下麵的代碼段,回答 a,b,c,d,e 結果是多少?
public class BitOperator01 {
    public static void main(String[] args) {
        int a = 1 >> 2;  //向右位移2位
        int b = -1 >> 2; //算術右移
        int c = 1 << 2;  //向左位移2位
        int d = -1 << 2; //算術左移
        int e = 3 >>> 2; //無符號右移
        //a,b,c,d,e 結果是多少
        System.out.println("a="+a); //0
        System.out.println("b="+b); //-1
        System.out.println("c="+c); //4
        System.out.println("d="+d); //-4
        System.out.println("e="+e); //0
    }
}

  • 請回答在 Java 中,下麵的表達式運算的結果是: (位操作)
  ~2=? // 按位取反 
  2&3=?// 2 按位與 3 
  2|3=?
  ~-5=? 
  13&7=? 
  5|4=? 
  -3^3=?//^ 按位異或

1.12.2 位運算符介紹

Java中有7個位運算(&、|、^、~、>>、<< 和 >>>)

1.12.3 >>、<< 和 >>> 的運算規則

1)算術右移>>:低位溢出,符號位不變,並用符號位補溢出的高位

2)算術右移<<:符號位不變,低位補0

3)>>> 邏輯右移也叫無符號右移,運算規則是: 低位溢出,高位補 0

  1. 特別說明:沒有 <<< 符號

1.12.4 應用案例 BitOperator01.java

  1. int a=1>>2; //1 => 00000001 => 00000000 本質 1 / 2 / 2 =0

  2. int c=1<<2; //1 => 00000001 => 00000100 本質 1 * 2 * 2 = 4

1.13 本章作業

一、計算下列表達式的結果

10 / 3 = 3; 10 % 2 = 0;

10 / 5 = 2; -10.5 % 3 = ;

a % b當a是小數時,公式 = a - (int)a / b * b

-10.5 % 3 = -10.5 - (-10) / 3 = -10.5 + 9 = - 1.5

註意:有小數運算,得到結果是近似值

二、試說出下麵代碼結果

  int i = 66;
  System.out.println(++i+i); //執行i=i+1 => i = 67 => 134

三、在Java中,以下賦值語句正確的是(CD)

A) int num1=(int)"18";//錯誤應該Integer.parselnt("18");B) int num2=18.0;M/錯誤double -> int
C) double num3=3d;M/ok
D) double num4=8;M/ok int -> doubleE) int i=48; char ch =i+1;1/錯誤int ->char
F) byte b = 19; short s = b+2;//錯誤int ->short

四、試寫出將String轉換成double類型的語句,以及將char類型轉換成String的語句,舉例說明即可,寫簡單代碼

String str = "18.8"

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 今天安裝 Postgresql14 遇到一個問題, 目標伺服器只有內網, 內網提供標準的apt倉庫, 但是因為不能連接外網, 所以沒法添加第三方倉庫, pg的官網只提供倉庫和源碼兩種方式, 因此不能訪問外網時, 貌似只有源碼編譯這條路. 因為源碼編譯費時費力並且安裝階段需要自行配置, 容易出錯. 對... ...
  • 摘要:Mysql出現問題:error while loading shared libraries: libaio解決方案。 本文分享自華為雲社區《Mysql出現問題:error while loading shared libraries: libaio解決方案》,作者: 小虛竹。 問題 初始化數 ...
  • 最近在用rust 寫一個redis的數據校驗工具。redis-rs中具備 redis::ConnectionLike trait,藉助它可以較好的來抽象校驗過程。在開發中,不免要定義struct 中的某些元素為 trait object,從而帶來一些rust語言中的生命周期問題。 本文不具體討論 r ...
  • 一、CentOS 7.9 安裝 rocketmq-4.9.2 地址: https://rocketmq.apache.org https://github.com/apache/rocketmq https://archive.apache.org/dist/rocketmq/4.9.2/rocke ...
  • #背景 用css動畫讓你的頁面交互動起來 #開始 <body> <button id="button">開始</button> <div id="block"></div> </body> <script> document.getElementById("button").addEventList ...
  • 近年來,越來越多的零售企業大力發展全渠道業務。在銷售額增長上,通過線上的小程式、直播、平臺渠道等方式,拓展流量變現渠道。在會員增長方面,通過多樣的互動方式,全渠道觸達消費者,擴大會員規模。而全渠道的庫存管理,逐漸變成零售商在渠道運營方面的核心活動,也是提高庫存周轉率,保證利潤的關鍵所在。 在全渠道模 ...
  • SSM整合以及相關補充 我們在前面已經學習了Maven基本入門,Spring,SpringMVC,MyBatis三件套 現在我們來通過一些簡單的案例,將我們最常用的開發三件套整合起來,進行一次完整的項目展示 溫馨提示:在閱讀本篇文章前,請學習Maven,Spring,SpringMVC,MyBati ...
  • 前言 之前學習muduo網路庫的時候,看到作者陳碩用到了enable_shared_from_this和shared_from_this,一直對此概念是一個模糊的認識,隱約記著這個機制是在計數器智能指針傳遞時才會用到的,今天對該機制進行梳理總結一下吧。 如果不熟悉C++帶引用計數的智能指針share ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...