關于源碼,反碼,補碼(正數--負數)---------(-128)自己的理解

以一個字節為例

1、無符號位,一個字節可以存放0~255共256個數字;有符號位存放-128~127共256個數字;

2、無符號全都表示為正數;有符號位則首位表示正負數,正數首位為0,負數首位為1(因此在判斷一個數為正還是負時會先看首位,如果為正直接算,如果為負還要經過求反碼、源碼)

以下以默認的有符號位示例

3、首先,要知道計算機中正數用源碼表示,負數用其正數的補碼表示;補碼為源碼的反碼加一(如-1即為1的反碼加一表示)

  1:0000 0001

  ?-1:1111 1111

  從1到-1的計算過程:0000 0001 ?取反碼為 ?1111 1110

            ?1111 1110 ? +1為補碼 ?1111 1111

  因此-1表示為 1111 1111

4、如果給你一個負數,要求你用二進制表示;

  第一:先判斷這個負數是否溢出(不管正負都要判斷),如果溢出就不能表示,如果要強制轉換就會造成數據不一致,那么原始數據就會丟失;

     如果不溢出,就下一步;

  第二:先用二進制表示出其對應的絕對值(正數)的二進制源碼;

  第三:根據源碼求反碼,源碼取反(~源碼);

  第四:根據反碼求補碼表示負數,反碼+1;

5、如果給你一個負數的二進制,求該二進制表示的負數為幾;

  第一:先求補碼,該負數的二進制-1;

  第二:根據補碼求源碼,補碼取反(~補碼);

  第三:將源碼算出代表幾;

?

關于牛客網題目的理解(正確答案為 B)

前言:不管什么都是按照上訴4、5計算;

  • 比如4,當正數溢出時,他還是會把源碼先(擴容后:如原本只裝1個字節,但是裝不下就擴用2個字節表示)表示出來,然后從低位截取再判斷正負再進行計算;
  • 當負數溢出時,他還是會將源碼表示出來,然后根據規則算出補碼,最后截取后存儲。由于截取后數值就變啦,因此所表示的就不是原來的數了,至于表示幾自己根據規則再算回去,有時甚至會變為正數就是這個原因;

?

因此這道題我是這么做的:

因為a為short類型,一共16位,表示128為:0000 0000 1000 0000

b為byte類型,一共8位,將a強制轉換后為:1000 0000

為什么1000 0000表示-128呢,我自己的理解是:

  1. 首先首位為1,則表示為負數 ,負數用補碼表示,所以1000 0000為補碼
  2. 補碼-1為反碼,即0111 1111
  3. 反碼取反,為1000 0000
  4. 1000 0000表示的的正值為27=128(這樣既符合正負數表示方法,數學數值上也說得通,包括16位的10000000 00000000表示-32768等等也是這個道理);所以1000 0000表示-128

總結:因此我認為通過負數二進制求其表示的數時,最后得出源碼后,應該是求源碼表示的正值;而1000 0000在byte中比較特別,因為它的補碼與源碼相同,所以最后得出源碼時會比較懵逼,但如果記住這時該求正值就行了;以后自己按照這個計算方法計算便可以,方便好記

轉載于:https://www.cnblogs.com/qiong2017/p/7666156.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/370952.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370952.shtml
英文地址,請注明出處:http://en.pswp.cn/news/370952.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

英特爾x722網卡驅動_產品詳情 | 從核心到邊緣,英特爾加速5G網絡基礎設施建設...

英特爾近期宣布推出無可比擬的5G基礎設施芯片產品組合,包括一款面向無線基站的10納米片上系統(SoC)英特爾凌動P5900,和一款面向5G網絡處理的結構化ASIC,一款針對5G網絡優化、提供基于GPS的高精度網絡服務同步功能的以太網適配器。此外&#x…

canvas離屏技術與放大鏡實現

教程所示圖片使用的是 github 倉庫圖片,網速過慢的朋友請移步>>> (原文)canvas 離屏技術與放大鏡實現。 更多討論或者錯誤提交,也請移步。 利用canvas除了可以實現濾鏡,還可以利用離屏技術放大鏡功能。為了方…

虛擬機下安裝ubuntu后root密碼設置

問題描述: 在虛擬機下安裝了ubuntu中要輸入用戶名,一般情況下大家都會輸入一個自己的網名或綽號之類的,密碼也在這時設置過了。 但是當安裝成功之后,使用命令#su root,然后輸入剛才設置的密碼,發現密碼錯誤…

使用Ajax的Spring MVC REST調用

這篇文章提供了對Spring MVC Web應用程序的REST調用的簡單示例。 它基于在Spring MVC上下文示例中使用Spring MVC服務靜態資源和使用Ajax獲取JSON 。 該代碼可在GitHub的Spring-REST-With-Ajax目錄中找到。 主頁 我們的主頁包含與執行Ajax調用的Javascript函數鏈接的四個按鈕…

團隊作業—預則立他山之石

團隊作業—預則立&&他山之石 Deadline: 2017.10.24 22:00pm 作業要求 一、確立團隊選題,建立和初步熟悉團隊git的協作方式。項目后續的代碼、文檔都要通過github增量式管理。實現文檔的版本化和增量式管理。 二、初步確立團隊任務計劃,將團隊的任…

linux7系統如何配置網卡,Linux 7 配置網卡(nmcli)

操作系統版本:[rootcjcos01 network-scripts]# cat /etc/redhat-releaseRed Hat Enterprise Linux Server release 7.5 (Maipo)查看網卡、IP等信息:[rootcjcos01 ~]# ifconfigenp0s3: flags4163 mtu 1500inet 192.168.1.90 netmask 255.255.255.0 bro…

學以致用深入淺出數字信號處理 pdf_數字陣列雷達--相控陣專題講座之三

數字陣列雷達-相控陣專題講座之三https://www.zhihu.com/video/1218562626877583360從名詞上看,數字陣列雷達,肯定是陣列雷達了,那么數字陣列與傳統的相控陣雷達又有什么區別呢?傳統的相控陣雷達,是依靠移相器、衰減器…

Ubuntu中右擊出現終端

1 root用戶 $sudo apt-get install nautilus-open-terminal 2重啟 3ok 轉載于:https://www.cnblogs.com/lanjianhappy/p/6761599.html

MapReduce:處理數據密集型文本處理–局部聚合第二部分

這篇文章繼續進行有關使用MapReduce進行數據密集型處理的書中實現算法的系列文章。 第一部分可以在這里找到。 在上一篇文章中,我們討論了使用本地聚合技術來減少通過網絡進行混洗和傳輸的數據量的方法。 減少傳輸的數據量是提高MapReduce作業效率的主要方法之一。 …

python爬蟲需要什么知識-學習Python爬蟲技術,需要掌握哪些web端的知識?

HTML5:html概述和基本結構、html標題標簽、html段落標簽、換行標簽、塊標簽、圖片標簽、a鏈接標簽、列表標簽、表格、表單、頁面布局等。 CSS3:CSS基本語法和頁面引用、CSS文本設置、顏色表示法、CSS選擇器、盒子模型、盒子模型實際尺寸、浮動、四大定位…

UDP學習總結

1、UDP的優勢是什么?有哪些典型的應用是使用UDP的?為什么? 2、轉載于:https://www.cnblogs.com/zhouhaibing/p/7669251.html

Linux版本的SVN客戶端,linux 下安裝 subversion(svn) 客戶端

svn server 為只支持http://協議的windows;test web server 為as4,現需安裝svn客戶端方便同步代碼網上找了下都是講如何安裝svn server的,我只需要一個支持http協議的客戶端哈,不想裝apache。安裝所需軟件apr,apr-util,sqlite,neon,subversion1.下載軟件…

使用bootstrap的dropdown部件時報錯:error:Bootstrap dropdown require Popper.js

前言:前端小白一枚,剛注冊博客,先發個學習過程中新碰到小問題試試水吧~ 摘要:最近在學習bootstrap,偶然碰到了一個小問題,bootstrap網站也沒有做過多的解釋,今天分享給大家。 問題描述&#x…

C#中的三層

三層架構(3-tier architecture) 通常意義上的三層架構就是將整個業務應用劃分為:界面層(User Interface layer)、業務邏輯層(Business Logic Layer)、數據訪問層(Data access layer)。區分層次的…

研究僵局–第3部分

在本系列的前兩個博客( 第1部分和第2部分)中 ,我演示了如何創建一段死鎖的不良代碼,然后使用該代碼展示了進行線程轉儲的三種方式。 在這個博客中,我將分析線程轉儲以找出錯誤的原因。 下面的討論同時涉及本系列第1部…

qq2009顯ip版怎么用_毛孔粗大怎么破?用對方法,輕松改善顯皮膚嫩滑

臉上毛孔粗大怎么破?超級煩惱尤其是一到秋季臉上經常油膩膩的為什么會毛孔粗大呢?毛孔粗大怎么破?用對方法,輕松改善顯皮膚嫩滑 當皮膚老舊角質積聚越多,會使肌膚變厚、變粗糙,毛孔變粗大,肌膚也…

linux 賬號密碼 字段,詳解Linux中的用戶密碼管理命令passwd和change

passwd修改用戶密碼參數-k 保持未過期身份驗證令牌-l 關閉賬號密碼。效果相當于usermod -L,只有root才有權使用此項。-u 恢復賬號密碼。效果相當于usermod -U,同樣只有root才有權使用。-g 修改組密碼。gpasswd的等效命令。-f 更改由finger命令訪問的用戶…

hello程序的運行過程-從計算機系統角度

hello程序的運行過程-從計算機系統角度 1、gcc編譯器驅動程序讀取源程序文件hello.c,并將它翻譯成一個可執行目標文件hello。翻譯過程分為四個階段:預處理階段,編譯階段,匯編階段,鏈接階段。 2、初始時,she…

靠譜的div引入任何外鏈內容

靠譜的div引入任何外鏈內容 開發中經常要在div中引入一個頁面,該頁面可能是內部頁面,可能是一個外部頁面,也可能只是一個域名獲取的請求. 對于內部頁面的加載,建議使用jquery的load函數,如: 1 $("#targetId").load("someUrl/templatePage.html"); 對于外…

Eclipse對類固醇的重構

在上一篇有關常見Java違規的文章中 ,我列出了Java開發人員容易犯的一系列錯誤。 在重構Java項目以解決這些違規問題的同時,我廣泛使用了Eclipse的重構功能來快速更改代碼。 下面是這種重構技術的匯編。 1.在塊級語句周圍添加花括號 用{curly braces}包裝…