進位記數制及其相互轉換
十進制、二進制、八進制、十六進制
真值、機器數(原碼、反碼、補碼)
字符與字符串的編碼(小端和大端方式存儲 )
數據校驗
奇偶校驗、CRC冗餘校驗、海明校驗c++
無符號數的表示,有符號數的表示
定點數的運算
移位、原碼加/減、補碼加/減、乘/除、溢出判別編碼
浮點:表示範圍、IEEE754標準、浮點數加/減運算
ALU結構
串行加法器和並行加法器、ALU的功能和結構
spa
20093d
12.一個 C 語言程序在一臺 32 位機器上運行。程序中定義了三個變量 xyz,其中 x 和 z 是 int型,y 爲 short 型。當 x=127,y= -9 時,執行賦值語句 z=x+y 後,xyz 的值分別是
A.X=0000007FH,y=FFF9H,z=00000076H
B.X=0000007FH,y=FFF9H,z=FFFF0076H
C.X=0000007FH,y=FFF7H,z=FFFF0076H
D.X=0000007FH,y=FFF7H,z=00000076H
code
答案:D
考點:整數的補碼錶示和補碼加法。x和z是int型,佔四個字節,y是short型佔兩個字節。blog
y=-9的二進制原碼爲1000 0000 0000 1001字符串
補碼=原碼取反+1 爲1111 1111 1111 0111 = (FFF7)16編譯器
而在進行x+y時,int型可以表示全部的short類型,因此現將short轉爲int再相加爲118編譯
13.浮點數加減運算過程通常包括對階、尾數運算、規格化、舍入和判溢出等步驟。設浮點數的階碼和尾數均採用補碼錶示,且位數分別爲 5 位和 7 位(均含 2 位符號位)。如有兩個數 X=27×29/32,Y=25×5/8,則用浮點加法計算 X+Y 的最終結果是
A.00111 1100010 B.00111 0100010
C.01000 0010001 D.發生溢出
class
答案:D
考點:浮點數加法運算
雙符號位法溢出判斷
根據題意,X可記爲00,111;00,11101(分號前爲階碼,分號後爲尾數),
Y可記爲00,101;00,10100(20/32)
(1)對階,X、Y階碼相減,即00,111-00,101=00,111+11,0111=00,010,可知X的階碼比Y的價碼大2,根據小階向大階看齊的原則,將Y的階碼加2,尾數右移2位,可得Y爲00,111;00,00101;
(2)尾數相加,即00,11101+00,00101=01,00010,尾數相加結果符號位爲01,故需進行右規;
(3)規格化,將尾數右移1位,階碼加1,得X+Y爲01,000;00,10001,階碼符號位爲01,說明發生溢出,故選D。
2010
13.假定有4個整數用8位補碼分別表示r1=FEH,r2=F2H,r3=90H,r4=F8H,若將運算結果存放在一個8位寄存器中,則下列運算會發生溢出的是()
A. r1 x r2
B. r2 x r3
C. r1 x r4
D. r2 x r4
答案:B
用補碼錶示時8位寄存器所能表示的整數範圍爲-128到+127。
r1=(15×16+14)-256=-2;
r2=(15×16+2)-256=-14;
r3=(9×16+0)-256=-112;
r4=(15×16+8)-256=-8;
則r1×r2=28,r2×r3=1568,r1×r4=16,r2×r4=112,只有r2×r3結果溢出。
14.假定變量i,f,d數據類型分別爲int, float, double(int用補碼錶示,float和double用IEEE754單精度和雙精度浮點數據格式表示),已知i=785,f=1.5678e3,d=1.5e100,若在32位機器中執行下列關係表達式,則結果爲真的是()
(I) i==(int)(float)I
(II)f==(float)(int)f
(III)f==(float)(double)f
(IV)(d+f)-d==f
A. 僅I和II B. 僅I和III
C. 僅II和III D. 僅III和I
答案:B
考查不一樣精度的數在計算機中的表示方法及其相互裝換。
在c++中爲了儘可能保證精度不丟失,通常會把低轉化爲高精度,好比char->int->float->double
因爲(int)f=1,小數點後面4位丟失,故Ⅱ錯。Ⅳ的計算過程是先將f轉化爲雙精度浮點數據格式,而後進行加法運算,故(d+f)-d獲得的結果爲雙精度浮點數據格式,而f爲單精度浮點數據格式,故Ⅳ錯。
(Ⅰ)i=(int)(float)i//i變成浮點數,不變;
(Ⅱ)f=(floal)(int)f//f變成整數時,精度變小;
(Ⅲ)f=(float)(double)f//f轉爲雙精度,大小不變;
(Ⅳ)(d+f)-d=f//雙精度值==單精度值,結果出錯。
2011
13.float型數據一般用IEEE 754單精度浮點數格式表示。若編譯器將float型變量x分配在一個32位浮點寄存器FR1中,且x = -8.25,則FR1的內容是
A.C104 0000H B.C242 0000H
C.C184 0000H D.C1C2 0000H
答案:A
x=-8.25=(-1000.01)2﹦(-1.000 01×23)2
階碼=E=e+127=130=(1000 0010)2,
單精度浮點數格式: 1位數符,8位階碼(含階符),23位尾數(格式化原碼尾數的最高位恆爲1,因此不在尾數中表示出來,計算時在尾數前面自動添加1)
故FR1內容爲:
1 1000 0010 000 0100 0000 0000 0000 0000
即1100 0001 0000 0100 0000 0000 0000 0000,
即C1040000H
43(11分)假定在一個8位字長的計算機中運行以下類C程序段:
unsigned int x = 134; unsigned int y = 246; int m = x; int n = y; unsigned int z1 = x–y; unsigned int z2 = x+y; int k1 = m–n; int k2 = m+n;
若編譯器編譯時將8個8位寄存器R1 ~ R8分別分配給變量x、y、m、n、z一、z二、k1和k2。(提示:帶符號整數用補碼錶示)
(1)執行上述程序段後,寄存器R一、R5和R6的內容分別是什麼?(用十六進制表示)
R1存儲的是134,轉換成二進制爲1000 0110B,即86H。
R5存儲的是x-y的內容,x-y=-112,轉換成二進制爲1001 0000B(補碼),即90H。
//x和y都是無符號整型,兩數相減的過程是按照正常的相減方式的,若是當作有符號的整型,那麼就是-20,存儲的信息也和有符號整型存儲的信息徹底一致,可是這二者表示數據的方法不同,這就致使了相同的信息表示出不一樣的數據,這裏的112是有符號整型的說法罷了。
R6存儲的是x+y的內容,x+y=380,轉換成二進制爲1 0111 1100B(前面的進位捨棄),即7CH。因爲計算機字長爲8位,因此無符號整數能表示的範圍爲0~255。而x+y=380,故溢出。
(2)執行上述程序段後,變量m和k1的值分別是多少?(用十進制表示)
m二進制表示爲1000 0110B,因爲m是int型,因此最高位爲符號位,因此能夠得出m的原碼爲:1111 1010(對10000110除符號位取反加1)(負數的原碼與補碼之間的轉換都是除符號位取反加一),即-122。
同理n的二進制表示爲1111 0110B,故n的原碼爲:1000 1010,轉成十進制爲-10。
因此k1=-122-(-10)=-112.
(3)上述程序段涉及帶符號整數加/減、無符號整數加/減運算,這四種運算可否利用同一個加法器及輔助電路實現?簡述理由。
能夠利用同一個加法器及輔助電路實現。由於無符號整數都是以補碼形式存儲,因此運算規則都是同樣的。
可是有一點須要考慮,因爲無符號整數和有符號整數的表示範圍是不同的,因此須要設置不同的溢出電路。
(4)計算機內部如何判斷帶符號整數加/減運算的結果是否發生溢出?上述程序段中,哪些帶符號整數運算語句的執行結果會發生溢出?
三種方法能夠判斷溢出:
雙符號位、最高位進位、符號相同操做數的運算後與原操做數的符號不一樣則溢出。
帶符號整數只有k2會發生溢出。
分析:8位帶符號整數的補碼取值範圍爲:
-128~+127,而k2=m+n=-122-10=-132,超出範圍,而k1=-112,在範圍-128~+127以內。
2012
13.假定編譯器規定 int 和 short 類型長度佔 32 位和 16 位,執行下列 C 語言語句
unsigned short x = 65530;
unsigned int y = x;
獲得 y 的機器數爲
A. 0000 7FFA B. 0000 FFFA
C. FFFF 7FFA D. FFFF FFFA
答案:B
考查:無符號數,零擴展
x=65530,將其化爲二進制 1111 1111 1111 1010,對應的16進製爲FFFA,將其轉化爲32位的int爲0000 FFFAH
14.float 類型(即 IEEE754 單精度浮點數格式)能表示的最大正整數是
A. 2126-2103
B. 2127-2104
C. 2127-2103
D.2128-2104
答案:D
考查: IEEE754 單精度浮點數格式
問題1:表示的爲何是正整數而不是小數?其實23位尾數是用來表示小數部分的,可是用階碼能夠表示的指數是127,若是都用上是遠大於小數部分的23位的。
問題2: 0.1111.....111111共23個1是怎麼表示成1-2-23的呢?其實能夠這樣想若是給這個數加上一個0.000......000001那麼就會變爲1,而這個0.000......000001
就是2-23 !
15.某計算機存儲器按字節編址,採用小端方式存放數據。假定編譯器規定 int 和 short 型長度分別爲 32 位和 16 位,而且數據按邊界對齊存儲。某 C 語言程序段以下:
struct{ int a; char b; short c; } record; record.a=273;
若 record 變量的首地址爲 0Xc008,則地址0Xc008 中內容及 record.c 的地址分別爲
A. 0x00、0xC00D C. 0x十一、0xC00D
B. 0x00、0xC00E D. 0x十一、0xC00E
答案:D
273=256+16+1=100010001B=0000 0111H
小端:高地址存高半字/字節;低地址存低半字/字節
什麼是數據按邊界對齊存儲?
簡單的說,對於int型而言,起始地址爲4的倍數;對於char類型而言,起始地址爲任意字節皆可;對於short類型而言,起始地址爲2的倍數;對於結構體而言,起始地址結構體內類型最大的字節量的整數倍;
0xC008 中內容:0x11,record.c的地址:0xC00E
2013
1三、某數採用 IEEE 754 單精度浮點數格式表示爲 C640 0000H,則該數的值是()
A. -1.5*213 B. -1.5*212
C. -0.5*213 D. -0.5*212
答案: A
二進制爲:1 100 0110 0 100 0000 0000 0000 0000 0000
符號位 1 負數
階碼 140-127=13
尾數 1.5
14.某字長爲8位的計算機中,已知整型變量x、y的機器數分別爲[x]補=11110100,[y]補=10110000。若整型變量 z=2*x+y/2,則 z 的機器數爲
A. 1 1000000 B. 0 0100100
C. 1 0101010 D. 溢出
答案:A
解析:將 x 左移一位,獲得 11101000
將 y 右移一位,獲得 11011000
兩數相加判斷是否溢出可使用雙符號位法來判斷,符號位和最高位進位都是1,不會形成溢出。
兩個數的補碼相加的機器數爲 11000000
15.用海明碼對長度爲 8 位的數據進行檢/糾錯時,若能糾正一位錯。則校驗位數至少爲
A. 2 B. 3 C. 4 D. 5
答案:C
考查:設校驗位的位數爲k,數據位的位數爲n,應知足下述關係:2k≥n+k+1。n=8,當k=4時,24(=16)>8+4+1(=13),符合要求,校驗位至少是4位。
2014
13. 若x=103,y=-25,則下列表達式採用8位定點補碼運算實現時,會發生溢出的是
A x+y B -x+y C x-y D -x-y
答案:C
8位原碼和反碼可以表示數的範圍是-127~127
8位補碼可以表示數的範圍是 -128~127
用補碼錶示時:
10000000-11111111表示-128到-1, 00000000-01111111表示0-127
補碼的1111 1111轉換成原碼就是1000 0001,也就是-1。
在補碼中用(-128)代替了(-0),因此補碼的表示範圍爲: -128~127
注意:(-128)沒有相對應的原碼和反碼, (-128) = (10000000),把10000000取反加1就是-128.
14. float型整數用IEEE754單精度浮點格式表示,假設兩個float型變量x和y分別在32爲寄存器f1和f2中,若(f1)=CC900000H, (f2)=B0C00000H,則x和y之間的關係爲:
A x<y且符號相同 B x<y且符號不一樣
C x>y且符號相同 D x>y且符號不一樣
答案:A
解析:將f1 f2 分別展開,分別判斷符號位和階碼
(f1)=CC900000H=1 100 1100 1 001 0000 0000 0000 0000 0000
(f2)=B0C00000H=1 011 0000 1 100 0000 0000 0000 0000 0000
在x,y同爲負數的狀況下,x的階碼爲26,尾數爲1.125;y的階碼爲-30,尾數爲1.5,則y>x
2015
1三、由 3 個「1」和 5 個「0」組成的 8 位二進制補碼,能表示的最小整數是()
A.-126 B.-125
C.-32 D.-3
答案B
二進制的補碼錶示。
對於這道題,咱們應該怎樣考慮?
選擇題的話,能夠投機一點,直接將選項轉爲補碼就好了。
但要是在問答題中,因爲最小的數確定是負數,首先第一位就是1 ,又由於補碼要取反,因此最小的數應該是 1,0000011.除開符號位取反加1後變成 1,1111101。這個數的十進制是-125
或者有這樣一種說法,補碼小這個數就小,補碼大這個數就大!
補碼:10000011
原碼:11111101=-125
14.下列有關浮點數加減運算的敘述中,正確的()
Ⅰ.對階操做不會引發階碼上溢或下溢
Ⅱ. 右規和尾數舍入均可能引發階碼上溢
Ⅲ.左規時可能引發階碼下溢
Ⅳ. 尾數溢出時結果不必定溢出
A.僅Ⅱ、Ⅲ B.僅Ⅰ、Ⅱ、Ⅳ
C.僅Ⅰ、Ⅲ、Ⅳ D.Ⅰ、Ⅱ、Ⅲ、Ⅳ
答案D
浮點數加減運算
1.對階時,統一保留大的階數,並不會形成階碼的上溢或者下溢。
2.右規和尾數舍入的過程會形成階碼的增長,於是有可能會引發階碼上溢。
3.左規的過程會形成階碼的減小,於是有可能會引發階碼下溢。
4.尾數溢出時,階碼不必定會溢出,結果也不必定能溢出。
補充:兩個浮點規格化數相乘,是否可能須要右規?爲何?是否可能須要左規?爲何?其規格化次數能否肯定?(6分)
答:不可能須要右規,可能須要左規,由於規格化的尾數是純小數,兩個純小數相乘不會獲得整數,但會變得更小,而且左規最多隻需一次。