我是 c 的新手,有时我会被我看到的东西弄糊涂。 我有以下代码:
int
sstmm_()
{time_t ourtime;
time(&ourtime);
return (int)(ourtime&0x00000fff);
}
我不明白ourtime&0x00000fff
是什么意思?
它是一个指针吗? 0x00000fff
的规则是什么?
非常感谢。
最佳答案
&
在这种情况下不是指地址,就像您可能混淆它一样,而是按位 AND。
按位 AND 运算采用一个左侧参数和一个右侧参数,在位级别(即 1 和 0)比较它们,并返回一个值,该值表示 LHS 和 RHS 中的哪个位置 有一个 1。例如,比较 6(二进制 0110
)和 3(二进制 0011
)会得到二进制(0010
>),即以 10 为基数的 2。
展示我们的作品:
0110
0011
----
0010
最右边第二个位置是两个值的唯一共同点 1 的位置,因此这是我们在对它们进行按位与运算后得到 1 的唯一位置。
由于该操作的右侧是 0x00000fff
,该操作正在执行的操作是采用参数 ourtime
并仅返回最低有效的 12 位(因为 0xF
是基数 2 中的 1111
。
再次展示我们的作品:
(ourtime has unknown 0s and 1s.)
00000000000000000000111111111111
由于右侧最高 20 位为零,最低 12 位全为 1,因此返回值显然是 ourtime
最低 12 位中的任何值。
关于c - C中的程序解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44354752/