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

时间:2014-06-24 05:42:07

标签: c

最近在CCS标准库中我看到过类似的东西

函数正在使用unsigned int参数。

delay(unsigned int)

这就像这样使用

delay(~(0));

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

如果我这样使用

printf("%d",(~(0)));

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

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

3 个答案:

答案 0 :(得分: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;
}

输出:

$ ./a.out
sizeof(0)=4 sizeof(~0)=4
0xFFFFFFFF
1

答案 1 :(得分:0)

默认情况下,所有整数常量都被视为signed int。但是,当您使用printf打印它时,参数将根据格式说明符进行类型化/提升。

delay(~(0));我假设delay()总是期望unsigned int参数因此~0 == 0xffffffff(因为int是4个字节,因此0xffffffff)将被提升为unsigned int

答案 2 :(得分:0)

~0是一个全1位的int(因为一元~是按位非运算符)。在大多数计算机上,two's complement <{3}} x86计算机上-1 printf("%d\n", ~0);

所以{{1}}输出-1。