C中的程序解释

时间:2017-06-04 13:47:50

标签: c pointers

我是c的新手,有时候我对所看到的事情感到困惑。 我有以下代码:

int
sstmm_()

{time_t ourtime;
 time(&ourtime);
 return (int)(ourtime&0x00000fff);
}

我不明白ourtime&0x00000fff的含义是什么? 它是一个指针吗? 0x00000fff的规则是什么? 非常感谢你。

3 个答案:

答案 0 :(得分:4)

&在这种情况下不会引用地址,就像你可能会混淆它一样,而是按位AND。

按位AND运算采用一个左侧参数和一个右侧参数,在位级比较它们(即1和0)并返回一个值,表示LHS和RHS 中的哪些位置有一个1.例如,比较6(二进制0110)和和3(二进制0011)会给我们二进制(0010),其在基数为10时为2

展示我们的工作:

0110
0011
----
0010

第二个最右边的位置是两个值共有一个1的唯一位置,所以这是我们在逐位AND运算后获得1的唯一位置。

由于该操作的右侧是0x00000fff,该操作正在执行的是获取参数ourtime并仅返回最低有效12位(因为0xF是{基数2)中的{1}}。

再次展示我们的作品:

1111

由于右侧的最高有效20位是零,而最低有效12位都是1,因此返回值显然是(ourtime has unknown 0s and 1s.) 00000000000000000000111111111111 的最低有效12位中的任何值。

答案 1 :(得分:2)

& 

代表按位和操作,它与地址和指针无关

答案 2 :(得分:1)

ourtime属于time_t类型,通常是__time_t

的typedef

__time_t类型本身并不是我要探索的第一件事,如果我是ANSI C的新手,标准表示它代表了自unix时代以来的系统时间,在Linux上就像环境一样,它通常是有符号整数,可能是32位或64位长。

在visual c ++中,传统上它是一个64位无符号整数。

所以,不,它不是一个指针,现在使用&,如果你看到两边的整数,那么它暗示它被用作二元运算符,如果你看到的话它与一个变量一起使用,它用作一元运算符。你应该看看ANSI C中有哪些不同类型的运算符。许多编程语言以类似的方式使用它们,使用&作为一元运算符是C / C ++的典型运算符。

&ourtime正在评估ourtime的地址。   ourtime&0x00000fff要求最后3个整数ourtime的半字节。