日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java千百问_03基本的语法(005)_二进制是如何做位运算的

發布時間:2024/10/12 java 79 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java千百问_03基本的语法(005)_二进制是如何做位运算的 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

點擊進入_很多其它_Java千百問


二進制是如何做位運算的

程序中的全部數在計算機內存中都是以二進制的形式儲存的。位運算說白了,就是直接對整數在內存中的二進制進行操作。

其它運算符看這里:java種的運算符都有哪些

大部分運算流程都是先將整數轉換為二進制。然后進行對應二進制操作。常見的操作有例如以下幾種:

以下我們具體說明,運算符的優先級看這里:java運算符的優先級是如何的

1、按位與 and
兩個二進制數進行按位與操作:同樣位的兩個數字都為1。則為1;若有一個不為1,則為0。


比如:00101 & 11100 = 00100
通經常使用于二進制取位操作,比如一個數 & 1的結果就是取二進制的最末位。
這能夠用來推斷一個整數的奇偶。二進制的最末位為0表示該數為偶數。最末位為1表示該數為奇數。



2、按位或 or
兩個二進制數進行按位或操作:同樣位僅僅要一個為1即為1。


比如:00101 | 11100 = 11101
通經常使用于二進制特定位上的無條件賦值,比如一個數 | 1的結果就是把二進制最末位強行變成1。


假設須要把二進制最末位變成0,對這個數 | 1之后再減一就能夠了。事實上際意義就是把這個數強行變成最接近的偶數。

3、按位異或 xor
兩個二進制數進行按位異或操作:同樣位不同則為1,同樣則為0。
比如:00101 ^ 11100 = 11001
異或運算能夠用于簡單的加密。是由于xor運算的逆運算是它本身。也就是說兩次異或同一個數最后結果不變。即(a xor b) xor b = a。


比方我想對某人說1314520,但怕別人知道,于是兩方約定拿生日 19871112作為密鑰。1314520 xor 19871112 = 20659024。我就把20659024告訴MM。MM再次計算20659024 xor 19871112的值,得到1314520。

4、按位取反 not
對一個二進制數進行按位取反操作:每一位的0變為1。1變為0。
比如:~ 0011 1100 = 1100 0011
使用not運算時要格外小心。你須要注意整數類型有沒有符號。

假設not的對象是無符號整數(不能表示負數),那么得到的值就是它與該類型上界的差,由于無符號類型的數是用00到$FFFF依次表示的。



5、左移
對一個二進制數進行左移操作:a << b就表示把a轉為二進制后左移b位(在后面添b個0)。左移是不區分有無符號的。
比如: 1100100 << 2 = 110010000,即100 << 2 = 400。
能夠看出。a << b的值實際上就是a乘以2的b次方,由于在二進制數后添一個0就相當于該數乘以2。


通常覺得a << 1比a * 2更快,由于前者是更底層一些的操作。因此程序中乘以2或者2的倍數的操作請盡量用左移一位來取代。


定義一些常量可能會用到shl運算。

你能夠方便地用1 << 16 - 1來表示65535。

6. 帶符號右移
對一個二進制數進行無符號右移操作:a >> b就表示把a轉為二進制后右移b位,符號位保持不變。
比如: 1100100 >> 2 = 11001,即100 >> 2 = 25。


和<<類似,相當于a除以2的b次方(取整)。

我們也經經常使用<< 1來取代除以 2,比方二分查找、堆的插入操作等等。
想辦法用<<取代除法運算能夠使程序效率大大提高。最大公約數的二進制算法用除以2操作來取代慢得出奇的mod運算,效率能夠提高60%。

7.無符號右移
對一個二進制數進行帶符號右移操作:a >> b就表示把a轉為二進制后右移b位。符號位也要參與移動。移動后高位補0。


僅僅是對32位和64位的值有意義。

點擊進入ooppookid的博客

轉載于:https://www.cnblogs.com/gccbuaa/p/7253461.html

總結

以上是生活随笔為你收集整理的Java千百问_03基本的语法(005)_二进制是如何做位运算的的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。