簡體   English   中英

移位運算符和按位或

[英]Shift operator and bitwise or

我有四個字符,分別為ch1,ch2,ch3,ch4。 我正在讀取一個二進制文件。 Que-以下代碼表示什么?

int GetLong(FILE * hTTF) 
{
    int ch1 = getc(hTTF);
    int ch2 = getc(hTTF);
    int ch3 = getc(hTTF);
    int ch4 = getc(hTTF);

 if ( ch4 == EOF )
  return( EOF );

 return( (ch1<<24)|(ch2<<16)|(ch3<<8)|ch4 );
}

考慮ch1 ='k',ch2 ='e',ch3 ='r',ch4 ='n'; 告訴我輸出,為什么會這樣? 我不了解產值。 Que-此轉換是什么(ch1 << 24)|(ch2 << 16)|(ch3 << 8)| ch4我們這樣做會得到什么?

ch [1234]是字符這一事實無關緊要:它們只是數字值。

只是想像這樣:

ch1 = 0x10;
ch2 = 0x20;
ch3 = 0x30;
ch4 = 0x40;

您的輸出值為十六進制值0x10203040。

輸出的是單個int,其中包含四個字符。 您可以這樣想:

我的四個字符是: 0x00, 0x02, 0x53, 0xEF

ch1 << 24 = 0x 00 000000

ch2 << 16 = 0x00 02 0000

ch3 << 8 = 0x0000 53 00

ch4 = 0x000000 EF

接下來與按位ors。

x | 0 = x
1 | x = 1

所以:

0x00000000
0x00020000
0x00005300
0x000000EF
----------
0x000253EF

返回值將是一個32位值,其中最高有效8位是ch1,接下來的8位是ch2,依此類推。 <<運算符是左移運算符,因此if(以二進制形式)

ch1 = 10101010

然后(添加點以提高可讀性)

ch1 << 24 = 10101010.00000000.00000000.00000000 

等等。 | 運算符是按位運算符,因此它僅組合了各種移位的ch值。

按步驟細分:

  1. 它從hTTF指向的文件中讀取4個8位字節,或者返回EOF;
  2. 如果它可以讀取這4個字節,則將其旋轉一次后逐位創建4個字節的值或將這4個字節合並在一起。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM