我正在使用NetBeans IDE中的C应用程序,应用程序基本上是客户端 - 服务器模型.我根据客户端的数据计算一些值,但在特定情况下,值计算失败.而不是返回值为65536我得到的值为256.
以下是这种情况:
int pckt_number = 0; //size of int is 4 bytes.
pckt_number = 0 << 8 ; // 1
pckt_number |= 1 << 8; //2
pckt_number |= 0 << 8 ; //3
pckt_number |= 0; //4
Run Code Online (Sandbox Code Playgroud)
这里从执行中跳过第3和第4个语句,并且返回值为256而不是65536.对于其余的情况,从1到65535计算正确的值.请注意int是4个字节.
让我们看看发生了什么:
int pckt_number = 0; // 0
pckt_number |= 0 << 8; // pckt_number = pckt_number | 0 --> still 0
pckt_number |= 1 << 8; // pckt_number = pckt_number | 256 --> 256
pckt_number |= 0 << 8; // pckt_number = pckt_number | 0 --> still 256
pckt_number |= 0; // pckt_number = pckt_number | 0 --> still 256
Run Code Online (Sandbox Code Playgroud)
最后两个陈述根本就什么都不做.它们不会被"跳过".第一行pckt_number |= 0 << 8也没有做任何事情.