我是C语言的初学者,对它的怪癖很感兴趣.为什么这段代码还能工作呢?
#include <stdio.h>
int main() {
unsigned char i = 126;
i = (i << 1000000000000000000000000000000000) % 10;
printf("%d", i);
return 0;
}
i
实际上可以处理高达6位的移位,但我能够做到这一点.我用来移位的值实际上并不重要,除非我大于6.我得到的值是6,而不是0.我相信这是正确的答案,因为我try 了宽度较大的数据类型和合理的左移量.
显然,我知道我使用的是模函数,但我的问题是,它不应该用实际上会导致0的值进行位移位,然后对它执行mod吗?