什么是" ts& 0xFFFF0000地址&#34 ;?

时间:2014-07-23 22:13:45

标签: c network-programming operators

我正在开发一个实时协议,为每个传输的数据包添加时间戳,但我不了解代码行的含义。谢谢你的帮助。

// ts for timestamp
unsigned int ts;


if(ts & 0xffff0000){
 // do something
}

4 个答案:

答案 0 :(得分:5)

鉴于他们正在使用二进制和(&),其意图似乎是检查是否设置了16个高位中的任何一个。

二进制 - 检查两个数字中每个位置的位,如果它们都是1,那么结果在同一位置为1位。否则结果在该位置为零

0b 001001001001001001001001001001  (first number, usually a variable)
0b 010101010101010101010101010101  (second number, usually a "mask")
=================================
0b 000001000001000001000001000001  (result)

如果将此用作if块的条件,例如if (x & mask),则如果x具有与mask设置的任何相同位,则输入if块。对于0xFFFF0000,如果设置了任何高16位,则将输入该块。

这实际上与if (ts > 65535)相同(如果int是32位或更小),但显然意图是处理位而不是实际值。

答案 1 :(得分:4)

0xffff0000在这里用作掩码。

ts & 0xffff0000的前16位中的某个位为1时,

ts满足条件。换句话说,当ts >= 2^16时。

答案 2 :(得分:1)

此IF循环检查ts的高16位中是否有。如果是,则执行循环。

IF循环仅在ts >= 0x00010000

时执行

答案 3 :(得分:0)

一种直观的理解方式。

    **** **** **** **** //the first 16bits of ts
&   1111 1111 1111 1111 //the first 16bits of 0xffff 0000

如果设置了ts的前16位之一,则上面的结果将不会为零。
如果它们全为0,则上面的结果将为0000 0000 0000 0000

对于ts的最后16位,无论这些位发生什么,Binary-and的结果均为0。

    **** **** **** ****
&   0000 0000 0000 0000
   =0000 0000 0000 0000

因此,如果ts的前16位具有一个1位==> ts&0xffff0000> 0(表示ts>=0b 10000 0000 0000 0000(即2 ^ 16)),则其他ts&0xffff0000 == 0

总是,我们还使用此ts&1测试ts是否为奇数。