補碼的認識
關於補碼的一些認識:
1.強制型別轉換不改變引數在計算機中的表示,位的表示沒有改變,改變的只是如何將這些位解釋成資料。。
看看下面的**:
unsigned
intx ;
inty = -2;
x = y;
print_binary(x);
print_binary(y);
unsigned
char
a;char
b = -2;
a = b;
print_binary(a);
print_binary(b);
short
intn = 12345;
short
intmx = -n;
print_binary(n);
print_binary(mx);
逐個驗證,都是成立的,注意對於最後乙個,不是強制型別轉換,而是取相反數,這個當然是要變的,補碼,取反加1. ok
2.先看看這個誤區。對於:
intnum = 0x12345678;
char *pnum = (char *)#
for (int j = 0; j < 4; j++ )
for (int
j = 0; j
< 4; j++ )
cout
<< endl;}
for (int
j = 0; j
< 4; j++ ) -8
-8 4294967288
4294967288
-4 -4
4294967292
4294967292
-1 4294967295
4294967295
請按任意鍵繼續. . .
%d和%u表示不同的輸出格式,前者是有符號的,後者是無符號的。如果型別不一致,那麼會按照這個格式來轉換的,比如乙個unsigned的型別,那麼用%d就會自動轉換成有符號的。。特別注意。
//用這個函式模板來實現輸出各位。。。
template
t>
void
print_binary(t
a)cout
<< endl;
}
認識原碼 反碼 補碼
二進位制八進位制 0000 1001 2010 3011 4100 5101 6110 7111 二進位制十六進製制 00000 10001 20010 30011 40100 50101 60110 70111 81000 91001 a1010 b1011 c1100 d1101 e1110 f...
對C 中的型別轉換的再認識
今天在看c 書的時候,讀到了用類的建構函式進行型別轉換的知識,我看了這個標題之後,就引起了我的好奇心,建構函式怎麼能進行型別轉換呢?之前學的基本資料型別的轉換 包括隱性型別轉換和顯性型別轉換 比如double 3 就是把原是int型的3強制轉換成double型的資料。那麼這個建構函式又是怎麼進行型別...
補碼 原碼 反碼的轉換
很多初學者覺得補碼 原碼 反碼之間的轉換很複雜,經常會搞混,其實只要記住下面的幾個要點,我們就會發現這其實是很簡單的。由於正整數的原碼 補碼 反碼都一樣,第一位為符號位,為0,餘下七位為二進位制形式。下面主要講解負整數三碼的轉換 1.原碼轉為反碼 符號位不變,數值位分別按位取反。eg.x 11010...