unsigned long i; /* unsigned long 型別為4位元組*/
char c1=0xa4;
char c2=0x31;
i = c2<<8 | c1;
問:i = (用16進製制格式)
如果:unsigned long i; /* unsigned long 型別為4位元組*/
char c1=0x74;
char c2=0x31;
i = c2<<8 | c1;
問:i = (用16進製制格式)
第乙個等於 0xff ff ff a4
第二個等於 0x31 74
這是為什麼呢? 請看下面。。。
*************************== 關於符號擴充套件 *************************==
1、要擴充套件的短資料型別為有符號數的
進行符號擴充套件,即短資料型別的符號位填充到長資料型別的高位元組位(即比短資料型別多出的那一部分),保證擴充套件後的數值大小不變。
在擴充套件成16位或者32位的時候,擴充套件位的值是1還是0是由char的符號位來決定的。
例子:char 型別在c語言裡面佔8位即1位元組,符號位看最高位(第八位);short型別在c語言裡面佔16位即2位元組。
1:char x=10001001b; short y=x; 則y的值應為11111111 10001001b;
// x 是 char 型有符號的,並且x 的最高位(即符號位)是1,所以 x 賦值給y時,擴充套件位全補1(即1111 1111) 。
2:char x=0000 1001b; short y=x; 則y的值應為00000000 00001001b;
// x 是 char 型有符號的,但符號位是0,所以 x 賦值給y時,擴充套件位全補0(即0000 0000) 。
2、要擴充套件的短資料型別為無符號數的
進行零擴充套件,即用零來填充長資料型別的高位元組位
例子:1:unsigned char x=10001001b; short y=x; 則y的值應為00000000 10001001b;
// x 是 unsigned char 型無符號的,所以擴充套件位全補0(即0000 0000) 。
2:unsigned char x=00001001b; short y=x; 則y的值應為00000000 00001001b;
// x 是 unsigned char型 無符號的,所以擴充套件位全補0(即0000 0000) 。
二、長資料型別縮減為短資料型別
如果長資料型別的高位元組全為1或全為0,則會直接擷取低位元組賦給短資料型別;如果長資料型別的高位元組不全為1或不全為0,則轉會就會發生錯誤。
三、同一長度的資料型別中有符號數與無符號數的相互轉化
直接將記憶體中的資料賦給要轉化的型別,數值大小則會發生變化。另短型別擴充套件為長型別時,但短型別與長型別分屬有符號數與無符號數時,則先按規則一進行型別的擴充套件,再按本規則直接將記憶體中的數值原封不動的賦給對方。
具體請看:
計算機基礎 進製轉換
0111 0101 2 6 2 5 2 4 2 2 2 0 64 32 16 4 1 1171.把十進位制數字拆分成多個2的整數次方之和,把每個拆分結果單獨轉換成二進位制,最後把所有轉換結果合併。85 64 16 4 1 2 6 2 4 2 2 2 0 0100 0000 0001 0000 000...
進製轉換問題 計算機基礎學習篇
8421法 快速將某進製數為轉二進位制,8421中哪幾個數相加能得到該進製數的就為1,其餘的為0。如 10 轉換為二進位制 8 4 2 1 8 2 10 1 0 1 0 最終10的二進位制數就為1010 八進位制轉二進位制 一轉三,八進位制數的一位轉為二進位制的三位。如 65 八進位制數 8 4 2...
計算機基礎 位元組序轉換
位元組序,顧名思義就是計算機儲存基本資料型別時 位元組的排列順序,計算機儲存位元組的順序分為兩種 大端位元組序和小端位元組序,儲存方式為 大端位元組序的0x11在硬體位址的高位,而小端位元組序的0x11在位址的低位。如圖 數值 0x11223344 大端 0x11223344 小端 0x443322...