1
a+b=0xFFFFFFFFFFFFFFFF,十六進制的F對應(yīng)十進制的15,再轉(zhuǎn)換成二進制則為1111。
所以a+b得1111 1111 1111 1111揉燃,二進制的首尾為符號位,1位負數(shù)筋栋,0則為正數(shù)炊汤,這里為1所以a+b的結(jié)果是負數(shù)。
負數(shù)在內(nèi)存中存儲以補碼的形式弊攘,所以求原碼的步驟為:
1.補碼-1得反碼(變?yōu)?111 1111 1111 1110)
2.反碼按位取反得原碼(1000 0000 0000 0001)
3.轉(zhuǎn)換成二進制結(jié)果為-1
2
3
在C++中竟宋,內(nèi)存分成5個區(qū)提完,他們分別是堆、棧丘侠、自由存儲區(qū)徒欣、全局/靜態(tài) 存儲區(qū)和常量存儲區(qū)。???????
棧蜗字,就是那些由編譯器在需要的時候分配打肝,在不需要的時候自動清楚的變量 的存儲區(qū)。里面的變量通常是局部變量挪捕、函數(shù)參數(shù)等粗梭。 ? ???
堆,就是那些由new分配的內(nèi)存塊级零,他們的釋放編譯器不去管断医,由我們的應(yīng) 用程序去控制,一般一個new就要對應(yīng)一個delete奏纪。如果程序員沒有釋放掉鉴嗤, 那么在程序結(jié)束后,操作系統(tǒng)會自動回收序调。
4
8086處理器(CPU)內(nèi)的寄存器都是16位的醉锅,地址線上的地址由CPU提供。CPU用兩個16位的值合成一個20位的值:將一個16位的值乘以16(相當(dāng)于這個16位的值保存在20位寄存器的低16位中发绢,然后將低16位往高位移動了4位)再加上另一個16位的值荣挨。將這個由2個16位合成的值提供給20根地址線作為訪問內(nèi)存的地址值。被乘以16的那個值被稱為段基址朴摊,沒有被乘以16的那個值被稱為偏移地址默垄。