关键是这个long long多少位?%lld\n又是如何动作的?
还有a = 12 << 30;这句中的12又什么类型?(显然12不是long long,这个和编译器有关,我的编译器不支持long long,所以没有具体的数据,但是从结果0来看,16位的可能大,所以结果为0,就算是32位,也正好为0)
这个某人的疑问:
这是源程序
#include<stdio.h>void main()
{
unsigned long long a;
a = 12 << 30;
printf("1111111111111111a = %lld\n",a);
a = 12;
a = a << 30;
printf("22222222222222222a = %lld\n",a);
}
下面是输出
1111111111111111a = 0
22222222222222222a = 12884901888
请问第一个输出为什么会是0
下面是我的分析:
而后面的是long long类型的12左移30位,当然不为0了
最重要的一点:不能假定a = 12 << 30;这句中的12为long long