計算機二進位制的表示
無符號數:
對於無符號數,二進位制表示容易理解,它的表示範圍:
比如一個 4位的無符號數字,它表示的範圍從0——2^4-1,即 從0——15,共16個數字;
二進位制表示 | 十進位制表示 |
0000 | 0 |
0001 | 1 |
… | … |
1111 | 15 |
當無符號數進行右移時,都是進行邏輯右移,即左邊空位為0補齊,比如1101右移兩位變為0011;
有符號數
對於有符號數,用補碼錶示,其實是把負數用補碼錶示。。什麼是補碼呢??比如說吧,對於一個鐘錶來說,它能表示的範圍為12,我們反向轉2個格時,也可以用正向轉10個格表示。所以啊,-2 對應的補碼就是10; 對於4位的表示的二進數,它能表示為從-8到7共16個數字,如下所示:
二進位制 | 十進位制 | 二進位制 | 十進位制 |
0000 | 0 | 1000 | -8 |
0001 | 1 | 1001 | -7 |
0010 | 2 | 1010 | -6 |
0011 | 3 | 1011 | -5 |
0100 | 4 | 1100 | -4 |
0101 | 5 | 1101 | -3 |
0110 | 6 | 1110 | -2 |
0111 | 7 | 1111 | -1 |
對有符號數進行右移時,基本都是進行算術右移,即補符號位。 對於正數來說,它的符號符號位為0,所以算術右移時,左邊空出位補 0; 對於 負數來說,它的符號位為1,所以算術右移時,左邊空出位補1。
用算術右移代替除數
對於正整數來說,在計算機中的當除不盡時,會直接拋棄小數位,只保留整數位。所以呢,對於正數來說,整數除法的結果總是小於或等於實際結果。 對於負數來說,整數除法的結果總是大於或等於實際結果。比如: 3 /2 = 1 , -3 /2 = -1;
當我們作算術右移來代替除法時,對於正整數來說,結果沒有問題,比如:
對於負整數來說,結果會經常比應該得到的結果大1。比如:
解決辦法為:
相關推薦
二進位制四進位制八進位制十六進位制之間轉換關係及淺談文字在計算機中表示
計數制: 是指用一組固定的符號和統一的規則來計數的方法。按進位的方式計數的數制,成為進位計數制,簡稱進位制。 不同進位制的特性: 1.R進位制,數碼符號都從0到R-1。 2.同一數碼,放在不同位置,含義不同。 3.逢R進1。 不同進位制兩個基本概念:基數和權。 基數:同
計算機二進位制的表示
無符號數: 對於無符號數,二進位制表示容易理解,它的表示範圍: 比如一個 4位的無符號數字,它表示的範圍從0——2^4-1,即 從0——15,共16個數字; 二進位制表示 十進位制表示 0000 0 0001 1 … … 1111 15 當無符號數進行右移時,都是進行邏輯右移,即左邊空位為0補齊
浮點數在計算機中的二進位制表示(IEEE 754 標準)
十進位制,二進位制轉換相關知識參考: 原碼,反碼,補碼,移碼相關知識參考: 想知道浮點數在計算機中的二進位制表示,先讓我們瞭解一下浮點數是怎麼用十進位制表示的。 浮點數的十進位制表示一般使用的是科學計數法。 科學記數法是一種記數的方法。把一個數表示成a與1
負數在計算機中的二進位制表示(原碼、反碼與補碼)
1 符號位 C語言規定,把記憶體的最高位作為符號位,且用0表示正數,用1表示負數。 2 在計算機中,負數以其正值的補碼形式表示 2.1 原碼 一個整數,按照絕對值大小轉換成的二進位制數,稱為原碼。 如 00000000 000000
二進位制表示中1的個數與異或關係
本文主要討論一下二進位制表示中1的個數和異或的關係,本文各種結論的證明都會省去,方便記憶。 問題:給定兩個數a,b,判斷a^b在二進位制表示下1的個數的奇偶性。 分析:設a在二進位制表示下1的個數為x,b在二進位制表示下1的個數為y,a中0匹配了b中k個1.(最後一句話可能有誤,不過不影響判斷奇偶性).
【LeetCode】 762. 二進位制表示中質數個計算置位
1.題目 給定兩個整數 L 和 R ,找到閉區間 [L, R] 範圍內,計算置位位數為質數的整數個數。 (注意,計算置位代表二進位制表示中1的個數。例如 21 的二進位制表示 10101 有 3 個計算置位。還有,1 不是質數。) 2.思路 step1:把L到R
leetcode 762. 二進位制表示中質數個計算置位(python)
給定兩個整數 L 和 R ,找到閉區間 [L, R] 範圍內,計算置位位數為質數的整數個數。 (注意,計算置位代表二進位制表示中1的個數。例如 21 的二進位制表示 10101 有 3 個計算置位
Leetcode762.Prime Number of Set Bits in Binary Representation二進位制表示中質數個計算置位
給定兩個整數 L 和 R ,找到閉區間 [L, R] 範圍內,計算置位位數為質數的整數個數。 (注意,計算置位代表二進位制表示中1的個數。例如 21 的二進位制表示 10101 有 3 個計算
輸出整數二進位制表示時1的數目
難倒是不難,倒是學到了一個巧妙的方法,加上對位操作的不熟悉,特此記錄 class Solution{ public int NumOf1(int n){ int count=0; int flag=1; while((n&flag)!=0){ count+
計算機如何表示色彩?
我們都知道,顏色或色彩是通過眼、腦和我們的生活經驗所產生的一種對光的視覺效應。 而其中人眼對紅、綠、藍這3種光的敏感度最高。 由於任何光都可以用紅、綠、藍這3種光按不同的比例混合而成(三原色原理),我們才能看到色彩斑斕的世界。 但是你知不知道沒有眼睛的計算機是如何獲取顏色並表示顏色
NYOJ954--N的階乘的二進位制表示最低位的1的位置
這個題和51nod1003 原理差不多 51nod1003 都是關於階乘的一些技巧 題目: 原理: 二進位制數 乘上2 末尾會多一個0 再乘一個二 末尾會再多一個0 也就是乘上2^2(2的平方)末尾會多兩個0 以此類推&nb
762. 二進位制表示中質數個計算置位
給定兩個整數 L 和 R ,找到閉區間 [L, R] 範圍內,計算置位位數為質數的整數個數。 (注意,計算置位代表二進位制表示中1的個數。例如 21 的二進位制表示 10101 有 3 個計算置位。還有,1 不是質數。) 示例 1: 輸入: L = 6, R = 10 輸出:
uva 11464 偶數矩陣 (二進位制表示法)
題目大意:有一個N*N的01矩陣,你的任務是把儘量少的0變成1,(但不能將1變成0)以使得每個元素的上下左右的元素(若存在)均為偶數。 思路 : 如果暴力列舉每一個位置的話時間複雜度為 2 的255 次方,肯定不行 。但是如果只列舉第一行,其他下面幾行都能夠通過
計算機二進位制單位
1 byte (B) = 8 bits 1 word (W) = 4 bytes = 32 bits 1 kilobyte (KB) = 1,024 bytes (10^3) 1 megabyte (MB) = 1,024 kilobytes (10^6) 1 gigabyte (GB) =
劍指offer刷題-數二進位制表示中1的個數
題目描述 時間限制:1秒 空間限制:32768K 熱度指數:294626 輸入一個整數,輸出該數二進位制表示中1的個數。其中負數用補碼錶示。 當n>0時,就容易處理了 s = '%s' %
求一個正整數的二進位制表示包含多少1
Java中,int型別佔四位元組,即32位,這裡我們假設正整數n是int型,那麼正整數32的二進位制表示為: 0000 0000 0000 0000 0000 0000 0010 0000 法一:位移法 我們對每一位進行判斷,首先判斷最低位,如果是1,那1的
計算一個自然數的二進位制表示中的“1”的個數
1 /* * 計算一個自然數的二進位制表示中的“1”的個數 * 用遞迴演算法 */ public class recursionTest { public static void main(String[] args) { for(
給定一個正整數n,求出0到n中有幾個數滿足其二進位制表示不包含連續的1
樣例: 輸入:5 輸出:5 0 01 10 100 101滿足,11不滿足。 那麼6144呢? 答案是610,怎麼去計算呢? 思路:查詢從0到n中有多少個數包含連續的1,然後在總數中去掉這些情況,得到
【劍指offer】輸入一個整數,輸出該數二進位制表示中1的個數,其中負數用補碼錶示。
題目要求 輸入一個整數,輸出該數二進位制表示中1的個數。其中負數用補碼錶示。 核心思路 如果一個整數不為0,那麼這個整數至少有一位是1,如果把這個整數減1,那麼原來整數最右邊的1就會變為0,原來在1右邊的所有0都會變為1。那麼,利用n = n & (n - 1),
二進位制位的翻轉和二進位制表示中1的個數
但是更加詳細的說明如下: 這兩個函式極很是巧妙,作了平行計算。 問題1: 將某數的二進位制中各位翻轉 unsigned char reverse8( unsigned char c ) { c = ( c & 0x55 ) << 1 |