c - C中的程序解释

标签 c pointers

我是 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/

相关文章:

c - 从用户获取字符串并使用 strlen() 查找其长度时出现段错误(核心转储)

c - 由于在 C 中打开新文件而导致数据损坏

将带有某人姓名的字符串转换为首字母缩写?

c - 是否可以使用 termcaps 保存多个光标位置,以便以后能够恢复它们?

c - 使用不分配的二维指针

c++ - 使用字符串数组 : arrays of pointers - Are they like multidimensional arrays?

c++ - 为什么表达式 *(b++) 不首先计算 b++?

objective-c - 应用程序访问的文件的名称

c - 下面的代码是什么,给出垃圾字符作为凯撒密码加密算法的输出?

c - 使用 malloc 作为双指针