1. 程式人生 > >java二進位制正數和負數取反

java二進位制正數和負數取反

“反碼”,“取反”,“按位取反(~)”,這3個概念是不一樣的。
取反:0變1,1變0
反碼:正數的反碼是其本身,對於負數其符號位不變其它各位取反(0變1,1變0)
按位取反(~): 這將是下面要討論的。
要弄懂這個運算子的計算方法,首先必須明白二進位制數在記憶體中的存放形式,二進位制數在記憶體中是以補碼的形式存放的。
另外正數和負數的補碼不一樣,正數的補碼、反碼都是其本身,負數的反碼是符號位不變,其餘位取反,補碼是反碼加1,即:
正數11:
原碼:00001011
補碼:00001011
反碼:00001011
負數-12
原碼:11111100
反碼:11110011
補碼:11110100
對正數11按位取反
原碼:00001011
補碼:00001011
反碼:00001011
對補碼取反: 11110100
減1得反碼: 11110011
反碼取反:     11111100

對負數-12按位取反
原碼:11111100
反碼:11110011
補碼:11110100
對補碼取反: 00001011


對正數取反的口訣:補碼取反減1取反
對負數取反的口訣:原碼取反加1取反
     規律:正數的取反等於正數加1取負        例如11的取反等於-12
        負數的取反等於負數加1取正     例如-12的取反等於11

相關推薦

java二進位制正數負數

“反碼”,“取反”,“按位取反(~)”,這3個概念是不一樣的。取反:0變1,1變0反碼:正數的反碼是其本身,對於負數其符號位不變其它各位取反(0變1,1變0)按位取反(~): 這將是下面要討論的。要弄

C語言正數負數迴圈右移,左移,把某正數的第m位(從0開始)到n位

問題:從鍵盤輸入一個整型數(int型),然後再輸入一個正整數m,把第一個數迴圈右移m位後輸出; int型別佔用32位。第一位為符號位,1則為負數,0為正數。 >>往右移動,右邊的丟棄,如果是正數,則左邊補0,如果是負數則補1. <<往左移動,每次移動

計算1個數--計算一個整數二進位制位中1的個數。要求效率儘可能的高。且能正確求正數負數二進位制中1的個數。

錯誤方法: 數字右移,這裡會涉及到移位的規則。 移位規則: 左移運算子m<<表示把m左移n位。左移n位的時候,最左邊的n位將被丟棄,同時在右邊補上n個0; 右移比左移稍微複雜一些,如果數字是一個無符號值或正數,右移時最左邊補0; 如果數字是

java程式: 輸入數量不確定的正數負數(一次輸入一個), 然後列印正數負數的個數,當輸入0時,程式停止

import java.util.Scanner; public class CountNumber { /* * 輸入數量不確定的正數和負數(一次輸入一個), 然後列印正數和負

java二進位制數原碼補碼碼,運算子 與(&)、非(~)、或(|)、異或(^)及位運算總結

    看過博主另一篇文章--Java集合--HashMap,對裡面使用的運算子及位運算不是很清楚的童鞋可以看下這篇文章,對理解hashMao原始碼很有幫助,自己也可以在程式中寫寫,逼格絕對滿分!!!      大家都知道一個位元組是8個二進位制

二進位制表示的數

一個整數,可以表示為二進位制的形式,請給出儘可能多的方法對二進位制進行逆序操作。 例如:10000110 11011000的逆序為 00011011 01100001 分析 題目中說是一個整數,對它的二進位制進行逆序。並不是一個01字串,或者01的陣列。那麼我們該如何

C++課後練習——從鍵盤輸入一組非0整數,以輸入0標誌結束,求這組整數的平均值, 並統計其中正數負數的個數。

從鍵盤輸入一組非0整數,以輸入0標誌結束,求這組整數的平均值, 並統計其中正數和負數的個數。 #include <iostream> using namespace std; void m

一個數組 裡面正數負數求所有子陣列的最大值

#include <iostream>   using namespace std; int maxSum(int* a, int n) {int sum = 0;//其實要處理全是負數的情況,很簡單,如稍後下面第3點所見,直接把這句改成:"int sum=a[

負數二進位制表現形式(對應的正數二進位制加1)

舉個例子: 在java中,int型別的資料在記憶體中佔32個位元組。 正整數 6 用二進位制表示: 0000-0000 0000-0000 0000-0000 0000-0110 負整數 -6 用二進位制表示: 1. 對應的正數二進位制取反 0000-0000 0000-

計算機系統 二進位制原碼 補碼 碼 詳解 JAVA 二進位制位運算(位與 位或 位 位異或 左移 右移)

       在計算機系統中,數值一律使用補碼來表示和儲存。在探求為何計算機要使用補碼之前, 讓我們先了解原碼, 反碼和補碼的概念。   對於一個數, 計算機要使用一定的編碼方式進行儲存。 原碼, 反碼, 補碼是計算機儲存一個具體數字的編碼方式。   一個數在計算機中的二

java學習筆記-獲取正數的原碼負數的補碼

輸入一個整數,輸出該數二進位制表示中1的個數。其中負數用補碼錶示。import java.util.ArrayList; import java.util.List; /** * * @auth

負數如何轉換成二進位制

1個位元組它不管怎麼樣還是隻能表示256個數,因為有符號所以我們就把它表示成範圍:-128-127。它在計算機中是怎麼儲存的呢? 可以這樣理解,用最高位表示符號位,如果是0表示正數,如果是1表示負數, 剩下的7位用來儲存數的絕對值的話,能表示27個數的絕對值,再考慮正負兩種

2018-07-25期 Java序列化序列化編程小案例

測試 product set pri get sof serial span not package cn.sjq.Serializable.java;import java.io.FileInputStream;import java.io.FileOutputStrea

分數的乘法逆元負數模運算

好的 分數 多少 研究 法則 表達 求余 推導 模運算 1.乘法逆元 A.定義 如果ax≡1 (mod p),且gcd(a,p)=1(a與p互質),則稱a關於模p的乘法逆元為x。 既然有ax≡1 (mod p),那麽有ax - py = 1,x是a關於模p的乘法逆元

java 二進位制負數互相轉化

負數表示 首先我們要對原碼、反碼和補碼有個瞭解: 1、所謂原碼就是二進位制定點表示法,即最高位為符號位,“0”表示正,“1”表示負,其餘位表示數值的大小。 2、反碼錶示法規定:正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符號位除外。 原碼10010= 反碼11101 (100

java檔案io二進位制io

這學期開的演算法課,要用到檔案io操作,索性看了一下,下面就我的理解來介紹一下。 因為有關檔案,有必要說一下絕對檔名(absolute file name)和相對檔名 。 絕對檔名是由檔名和其完整路徑以及驅動器字母組成。例如:c:\book\Welcome.java 而Welcome.j

JAVA按位運算

按位取反是對補碼進行運算,當運算完後,再將補碼變回原碼。 這個符號為按位取反運算子。按位取反的運算規則為0變成1,1變成0. [0->1,1->0] 有這麼一個題:1.求~9的結果是什麼 解:9的二進位制數表示 0000 100

java序列化序列化物件

import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; impo

從鍵盤任意輸入n個實數,分別計算並輸出其中正數的平均值負數的平均值,需要考慮可能出現的異常,並給出異常處理

異常一共也就幾種,陣列越界,分母為0異常     第一種交給jvm處理 package chuki; import java.util.*; public class Two { public static void main(String[] args)