如何(〜(0))将在c中解释?

Jee*_*tel 0 c

最近在CCS标准库中我见过这样的东西

函数正在使用unsigned int参数.

delay(unsigned int)
Run Code Online (Sandbox Code Playgroud)

这是以这种方式使用的

delay(~(0));
Run Code Online (Sandbox Code Playgroud)

现在如何解释(〜(0))?

如果我这样使用

printf("%d",(~(0)));
Run Code Online (Sandbox Code Playgroud)

它如何处理签名int?unsigned int?长整数?还是unsigned char?

它如何依赖于系统?c规格说的是什么?

Jon*_*art 5

回想一下,这~是按位NOT运算符,这0是一个整数,sizeof(int)大小为字节.

由于0所有位都设置为零,(~0)因此所有位都设置为1.

如果(像大多数系统一样)sizeof(int)==4,那么你(~0) == 0xFFFFFFFF.

基本上,这是delay可能的最大值(假设delay(unsigned int))


#include <stdio.h>
#include <limits.h>

int main(void)
{
    printf("sizeof(0)=%d sizeof(~0)=%d\n", sizeof(0), sizeof(~0));
    printf("0x%X\n", (~0));
    printf("%d\n", (~0)==UINT_MAX);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

$ ./a.out
sizeof(0)=4 sizeof(~0)=4
0xFFFFFFFF
1
Run Code Online (Sandbox Code Playgroud)