我正在开发一个实时协议,为每个传输的数据包添加时间戳,但我不了解代码行的含义。谢谢你的帮助。
// ts for timestamp
unsigned int ts;
if(ts & 0xffff0000){
// do something
}
答案 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是否为奇数。