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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

什么是原码、反码、补码?什么是按位与?范围数字按位与!

發布時間:2023/11/28 生活经验 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 什么是原码、反码、补码?什么是按位与?范围数字按位与! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言:學過計算機基礎的大家都知道什么是二進制,什么是“與”運算,這里先給大家復習一下。

舉一個簡單的例子:
5的二進制表示是0101(補齊4位)
7的二進制表示是0111(補齊4位)

那么5&7=多少呢?

這里給大家普及一下與計算的規則:

  1. 參與運算的兩個數均以補碼出現
  2. 只有對應的兩個二進位都為1時,結果位才為1

上面提到的補碼是什么呢??

二進制計算有三種“碼”——原碼、反碼、補碼👇

1.原碼

就是我們上面的那種符號位加上真值的絕對值, 即用第一位表示符號, 其余位表示值. 比如如果是8位二進制:

負0101
原碼:1000 0101
正0101
原碼:0000 0101

2.反碼

正數的反碼是其本身
負數的反碼是在其原碼的基礎上, 符號位不變,其余各個位取反.

負0101
原碼:1000 0101
反碼:1111 1010

正0101
原碼:0000 0101
反碼:0000 0101

3.補碼

正數的補碼就是其本身
負數的補碼是在其原碼的基礎上, 符號位不變, 其余各位取反, 最后+1. (即在反碼的基礎上+1)

負0101
原碼:1000 0101
反碼:1111 1010
補碼:1111 1011

正0101
原碼:0000 0101
反碼:0000 0101
補碼:0000 0101

對上面的5和7,都是正數,所以原碼=反碼=補碼,我們按位進行一個比較,相等則取1,不相等則取0,那么我們得到的結果就是0101 即5。

至此,原反補已介紹完畢!👆


接下來,我們對按位與進行一個深入了解👇

在力扣上有一道練習題201 數字范圍按位與,題目如下:
給定范圍 [m, n],其中 0 <= m <= n <= 2147483647,返回此范圍內所有數字的按位與(包含 m, n 兩端點)。

示例 1:
輸入: [5,7]
輸出: 4

示例 2:
輸入: [0,1]
輸出: 0

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/bitwise-and-of-numbers-range
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

由題目我們可以看出,此題不只是我們用補碼計算的按位與,而是一個范圍的數字的按位與

此題何解?👇

當一個數+1時,總會有這么一個規律“某一位后的數字,全部被置為相反數”。舉個例子:010111 + 1 = 011000,則010111 & 011000 = 010000。那么,x & (x+1) 后幾位相反數的“與操作”,結果總為0。
所以,當(m,m+1,...n-1,n)進行連續“與操作”時,會按照上述規律被抵消很大一部分,而只剩下n的前綴部分,最后只需將n歸位。
用這個例子應該可以大概明白上面一段話的含義:

m = 5(0101), n = 7 (0111)。不停右移,得到n前綴部分為01,最后歸位前綴得res=0100=4
即右移至前幾位相等,然后再對右移后的數進行相同次數的左移,即可得到按位與的結果

public class _201_數字范圍按位與 {public int rangeBitwiseAnd(int m, int n) {int offset = 0;for (; m != n; ++offset) {m >>= 1;n >>= 1;}return n << offset;}
}

以上!

總結

以上是生活随笔為你收集整理的什么是原码、反码、补码?什么是按位与?范围数字按位与!的全部內容,希望文章能夠幫你解決所遇到的問題。

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