最近在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规格说的是什么?
回想一下,这~是按位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)