[英]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
值。
按步骤细分:
hTTF
指向的文件中读取4个8位字节,或者返回EOF;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.