我是c的新手,有时候我对所看到的事情感到困惑。 我有以下代码:
int
sstmm_()
{time_t ourtime;
time(&ourtime);
return (int)(ourtime&0x00000fff);
}
我不明白ourtime&0x00000fff
的含义是什么?
它是一个指针吗? 0x00000fff
的规则是什么?
非常感谢你。
答案 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
__time_t
类型本身并不是我要探索的第一件事,如果我是ANSI C的新手,标准表示它代表了自unix时代以来的系统时间,在Linux上就像环境一样,它通常是有符号整数,可能是32位或64位长。
在visual c ++中,传统上它是一个64位无符号整数。
所以,不,它不是一个指针,现在使用&,如果你看到两边的整数,那么它暗示它被用作二元运算符,如果你看到的话它与一个变量一起使用,它用作一元运算符。你应该看看ANSI C中有哪些不同类型的运算符。许多编程语言以类似的方式使用它们,使用&作为一元运算符是C / C ++的典型运算符。
&ourtime
正在评估ourtime
的地址。
ourtime&0x00000fff
要求最后3个整数ourtime
的半字节。