【发布时间】:2015-04-17 03:46:59
【问题描述】:
我是 C 初学者,我对 C 答案簿中的以下示例感到困惑。
在系统上查找 unsigned long long 大小的一种方法是键入:
printf("%llu", (unsigned long long) ~0);
我不知道为什么这种语法有效?
在我的系统上,int 是 32 位,long long 是 64 位。
我的预期是,由于0 是一个整数类型的常量,~0 计算一个 32 位整数的否定,然后由 cast 运算符转换为一个 unsigned long long。结果应该是 232 - 1 。
不知何故,~ 运算符似乎已经知道它应该作用于 64 位?
编译器是否将此指令解释为 printf("%llu", ~(unsigned long long)0); ?这听起来不对,因为演员表和~ 具有相同的优先级。
【问题讨论】:
标签: c integer bitwise-operators literals