計算機基礎部分 資料轉換 移位問題

2021-06-07 00:45:01 字數 1512 閱讀 6688

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...