Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言的程序解释_C_Pointers - Fatal编程技术网

C语言的程序解释

C语言的程序解释,c,pointers,C,Pointers,我是c语言的新手,有时我会被我看到的东西弄糊涂。 我有以下代码: int sstmm_() {time_t ourtime; time(&ourtime); return (int)(ourtime&0x00000fff); } 我不明白ourtime&0x00000fff的含义是什么? 它是指针吗?0x00000fff的规则是什么? 非常感谢你 & 在这里代表按位and运算,它与地址和指针无关&在这种情况下不引用的地址,就像您可能会混淆它一样,而是按位and

我是c语言的新手,有时我会被我看到的东西弄糊涂。 我有以下代码:

int
sstmm_()

{time_t ourtime;
 time(&ourtime);
 return (int)(ourtime&0x00000fff);
}
我不明白
ourtime&0x00000fff
的含义是什么? 它是指针吗?
0x00000fff
的规则是什么? 非常感谢你

& 

在这里代表按位and运算,它与地址和指针无关

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

按位AND运算采用一个左侧参数和一个右侧参数,在位级别(即1s和0s)比较它们,并返回一个值,该值表示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

ourtime
的最低有效12位中的任何一位,它属于
time\t
类型,通常是
的typedef

\uuuu time\t
类型本身并不是我第一次接触ANSI C,标准说它代表自unix时代以来的系统时间,在类似linux的环境中,它通常是有符号整数,可能是32位或64位长

传统上是一个64位无符号整数。p> 所以,不,它不是指针,现在使用了-,如果你看到两边都是整数,那么它就意味着它被用作二进制运算符,如果你只看到它被用作一个变量,它被用作一元运算符。您应该检查一下ANSI C中的不同类型的运算符。许多编程语言都以类似的方式使用它们,但使用&作为一元运算符对于C/C++来说是典型的

&ourtime
正在评估
ourtime
的地址。
ourtime&0x00000fff
要求最后3位整数
ourtime

在类UNIX系统上,它给出一个介于0和4095之间的数字,te值每秒更改一次。@JonathanLeffler:为了澄清
时间的分辨率\u t
取决于系统;12位整数的值为0到4095这一事实当然是普遍的。即便如此,我还没有遇到过这样一个系统,
time\u t
不是以秒为单位的,不管它是否像Unix;如果不是这样的话,它将破坏许多做出这种假设的代码。@Clifford:不;在类UNIX系统上,POSIX将时间定义为一个具有1秒粒度的整数类型。这就是为什么有资格赛。我不是在评论其他系统类型。@JonathanLeffler:我认为我们在这一点上达成了激烈的一致——这是POSIX做出的保证,我认为它可能也是通用的,这只是一个旁注,而不是一个分歧。我的主要观点是,你的句子顺序相当于暗示0到4095的范围取决于系统。我在澄清依赖关系只适用于解决方案。好的。我懂了。很好。请您再解释一下好吗?ourtime&0x00000fff这个语句对ourtime的值和用十六进制表示的4字节长的值进行按位and运算,0x00000fff非常感谢