深入理解計算機系統----讀書筆記

第二部分

?? 信息的表示和處理

?

信息存儲:

?? 二進制(0101001), 八進制,十六進制(0x32FD)

? (word size)指明整數和指針數據的標稱大小(normal size),對于w位的機器而言,虛擬地址范圍0-2w-1,

如32位機器最大尋址為4GB,無符號整數表示0-42億

? 數據大小 根據數據類型(int float bool等)

? 尋址和字節順序 大端小端的問題(兩種表示方法,在網絡通訊的時候可能會產生問題,需要注意)

無標題

大端:最高有效位字節在前面

小端:最低有效位字節在前面

下圖所示為小端表示機器顯示結果(-12345的補碼表示 0xCFC7)

無標題2

?

?

布爾代數和布爾環

當考慮長度為w的位向量上的^,&和~運算時,會得到一種不同的數學形式,我們稱之為布爾環( Boolean ring)

布爾環與整數運算有很多相同的屬性。 如 整數運算的一個屬性是每個值x都有一個加法逆元(additive inverse)-x

使得x+(-x) = 0。? 布爾環的的“加法”是^(異或),即 a^a = 0;

因此 (a^b)^a= b? 固有一下的代碼:

void inplace_swap(int* x, int* y){*y = *x ^ *y; // x =x , y = x ^ y    *x = *x ^ *y; //x  = x ^(x^y) = y, y = x ^ y*y = *x ^ *y; //y = y ^ (x ^ y) = x ,
}

?

以下代碼可能會出現的問題:數組個數為奇數時,中間一位的數字變為0,奇數時正常逆序

void reverse_array(int a[],int cnt){int first, last;for(first = 0,last = cnt - 1; first <= last; first++,last--)inplace_swap(&a[first],&a[last]);        
}

原因: 因為奇數時中間一位 調用inplace_swap()函數,a^a = 0;

修改方法: 1、在inplace_swap()前加上 if( first != last)判斷, ps: 后來看答案是 first< last,這種改法更合理

??????????????? 2、修改inplace_swap()函數

?

C語言中的移位運算:

邏輯右移:在左端補k個0

算術右移:在左端補k個最高有效位的值(最有符號數據的運算非常有用

? 小結:? 無符號數邏輯右移和算術右移的位表示是一樣的,

???????????? 有符號數則不一樣(有符號數采用補碼表示),幾乎所有的編譯器/機器組合都對有符號數采用算術右移,程序員都??? 假設是機器會使用算術右移。

ps: 左移 =* 2n? 右移? =/2n

????? 移位運算優先級較低,低于加減? 如果不清楚就增加括號,? 如 1 << 2 + 3 <<? 4 實際意義: 1 << 5 << 4

?

?

有符號數與無符號數之間的轉換:

?????? Ps: 一般機器有符號數都用補碼表示(但不是標準和原則)

要點:

?? 1、C語言運行無符號數和有符號數轉換,轉換的原則是位表示保持不變

?? 2、將無符號數擴展成更大的數據類型,在表示的開頭加0,稱為零擴展

?? 3、將一個數的補碼轉換為一個更大的數據類型可以執行符號擴展添加最高有效位的值的副本

//數據轉換 擴展short sx = -12345;unsigned short usx = sx; //53191int x = sx;unsigned int ux = usx;printf("sx = %d\t",sx);show_bytes((byte_pointer)&sx,sizeof(short));printf("usx = %u\t",usx);show_bytes((byte_pointer)&usx,sizeof(unsigned short));printf("x = %d\t",x);show_bytes((byte_pointer)&x,sizeof(int));printf("ux = %u\t",ux);show_bytes((byte_pointer)&ux,sizeof(unsigned));

結果如下:

無標題2

轉載于:https://www.cnblogs.com/jackStudy/p/4798763.html

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

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

相關文章

FiddlerScript-常用總結

沒有用過Fiddler的人應該對FiddlerScript沒啥感觸&#xff0c;我是真心覺得FiddlerScript對測試有一定的幫助哈。在web前端開發過程中&#xff0c;Fiddler是最常用的一款調試工具&#xff0c;那對于測試來說&#xff0c;對測試來說也是一大利器。在大多數情況下&#xff0c;通過…

OpenStack-Zun 使用

Zun組件簡介 Zun是Openstack中提供容器管理服務的組件&#xff0c;于2016年6月建立。Zun的目標是提供統一的Openstack API用于啟動和管理容器&#xff0c;支持多種容器技術。Zun原來稱為Higgins&#xff0c;后改名為Zun。 Zun計劃支持多種容器技術&#xff0c;Docker&#xff0…

【優雅代碼】深入淺出 妙用Javascript中apply、call、bind

這篇文章實在是很難下筆&#xff0c;因為網上相關文章不勝枚舉。 巧合的是前些天看到阮老師的一篇文章的一句話&#xff1a; “對我來說&#xff0c;博客首先是一種知識管理工具&#xff0c;其次才是傳播工具。我的技術文章&#xff0c;主要用來整理我還不懂的知識。我只寫那些…

PHP筆記隨筆

1.CSS控制頁面文字不能復制&#xff1a; body{-webkit-user-select:none;} 2.【php過濾漢字和非漢字】 $sc"aaad....##--__i漢字過濾"; //iconv("UTF-8","GB2312",$sc);utf-8轉碼 echo $temperegi_replace("[^\x80-\xff]",""…

qt linux 添加庫文件路徑,Linux下Qt調用共享庫文件.so

jvm--4垃圾收集6. 垃圾收集GC (1)當需要排查各種內存溢出,內存泄漏等問題,當GC成為系統達到更高性能的瓶頸時,我們就需要對這些自動化的GC進行監控和調節. (2)PC計數器.本地方法棧.虛擬機棧,隨方法或者線 ...GET和POSTAjax與Comet 1. Ajax Asynchronous Javascriptxml :能夠向服…

js進階 14-8 表單序列化函數serializeArray()和serialize()的區別是什么

js進階 14-8 表單序列化函數serializeArray()和serialize()的區別是什么 一、總結 一句話總結&#xff1a;兩者都是對表單進行序列化&#xff0c;serializeArray()返回的是json對象&#xff0c;serialize()返回的是json形式的字符串&#xff0c;使用起來都是一樣的 1、$&#x…

HDU 2842 Chinese Rings(矩陣高速功率+遞歸)

職務地址&#xff1a;HDU 2842 這個游戲是一個九連環的游戲。 如果當前要卸下前n個環。由于要滿足前n-2個都卸下&#xff0c;所以要先把前n-2個卸下。須要f(n-2)次。然后把第n個卸下須要1次&#xff0c;然后這時候要卸下第n-1個。然后此時前n-2個都已經被卸下了。這時候把前n-2…

硬鏈接與軟連接

linux系統硬鏈接和軟連接&#xff1a; 1文件都由文件名和數據組成&#xff0c;在linux中文件被分為兩個部分&#xff1a;用戶數據和元數據。用戶數據&#xff1a;即文件數據塊&#xff0c;記錄真實數據的地方。元數據&#xff1a;文件的附加屬性&#xff0c;記錄文件的大小&…

linux 7.2中文命令,CentOS7如何支持中文顯示

1.查看系統是否安裝有中文語言包locale -a | grep "zh_CN" 命令含義&#xff1a;列出所有可用的公共語言環境的名稱&#xff0c;包含有"zh_CN"若出現圖中所示幾項&#xff0c;那么說明系統中已經安裝了語言包&#xff0c;不需要在安裝。含義是&#xff1a;…

html-拖拽

html-拖拽(draggable"true")拖拽的7個事件&#xff1a;> 拖拽塊.οndragstartfunction(){console.log("拖拽開始")&#xff1b;}> 拖拽塊.οndragfunction(){console.log("拖拽中")&#xff1b;}> 拖拽塊.οndragendfunction(){console…

大道至簡

道在中國哲學中&#xff0c;是一個重要的概念&#xff0c;表示“終極真理”。此一概念&#xff0c;不單為哲學流派諸子百家所重視&#xff0c;也被宗教流派道教等所使用。大道至簡是指大道理&#xff08;基本原理、方法和規律&#xff09;是極其簡單的&#xff0c;簡單到一兩句…

別人7天樂,運維還苦逼值班?

你被點名值班了嗎&#xff1f;或者你的朋友、隔壁七大姑八大姨的侄子被點名值班了嗎&#xff1f; 國慶將至&#xff0c;大家都開始研究各種度假攻略了&#xff0c;國內游、國外游、地球游、外星游。。。然而總有一票人&#xff0c;默默地職守著 -- tIT 公司運營支撐組/運維組。…

【常用損失函數】

一、Smooth L1 Loss 1.公式&#xff1a; 2.原因&#xff1a; L1損失使權值稀疏但是導數不連續&#xff0c;L2損失導數連續可以防止過擬合但對噪聲不夠魯棒&#xff0c;分段結合兩者優勢。 二、Focal Loss 1.公式&#xff1a; 2.作用&#xff1a; 使得正負樣本平衡的同時&#x…

ORA-01940: cannot drop a user that is currently connected解決方法

我們在刪除數據庫用戶時候會碰到如下錯誤 SQL> DROP USER sys_xj cascade; DROP USER sys_xj cascade*ERROR at line 1:ORA-01940: cannot drop a user that is currently connected 解決方法&#xff1a; 1.查詢出還在連接的此用戶會話進程 SQL> SELECT SID,SERIAL# FR…

實現對象克隆

實現Serializable接口&#xff0c;通過對象的序列化和反序列化實現克隆&#xff0c;可以實現真正的深度克隆&#xff0c;代碼如下 package com.lovo; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; i…

linux 讀取內存顆粒,linux查看主板內存槽與內存信息的命令dmidecode怎么用

在Linux中&#xff0c;我們常常使用命令來實現許多操作&#xff0c;比如查看內存信息等&#xff0c;下面小編就為大家帶來一篇linux查看主板內存槽與內存信息的命令dmidecode方法。小編覺得挺不錯的&#xff0c;現在就分享給大家&#xff0c;也給大家做個參考。一起跟隨小編過來…

python 圖像處理(從安裝Pillow開始)

python 圖像處理(從安裝Pillow開始) python2.x及以下用的是PIL(圖像處理庫是 PIL(Python Image Library))&#xff0c;最新版本是 1.1.7 可在http://www.pythonware.com/products/pil/index.htm 下載和學習。 不過從該網站可看出它不支持python3.x Pillow由PIL而來(支持3.x)&…

手機還是不要隨便更新的好

新入mate9pro 不到一個月&#xff0c;手賤升級了系統版本&#xff0c;出現導航搜索不到衛星的情況&#xff0c;軟件下載了高德地圖、騰訊地圖、百度地圖&#xff0c;逐一卸載安裝重試&#xff0c;沒一個能成功的&#xff0c;后來又下載了專業搜星軟件&#xff0c;還是搜不到衛星…

Java對象容器——List

為什么80%的碼農都做不了架構師&#xff1f;>>> 在Java中&#xff0c;我們可以用數組來存放同類型的變量或對象&#xff0c;但是數組有一個缺陷&#xff0c;它的長度不可變&#xff0c;必須在定義時給定其長度&#xff0c;所以說在一些場合下不適用。例如我們要存放…

STL學習筆記(數值算法)

運用數值算法之前必須先加入頭文件<numeric> 加工運算后產生結果 1.對序列進行某種運算 T accumulate(InputIterator beg,InputIterator end, T initValue) T accumulate(InputIterator beg,InputIterator end, T initValue,BinaryFunc op) 1.第一種形式計算InitValue和…