代码功能
验证定义一个int x,x*x不是永远大于零的。
完整代码
#include <stdio.h>
#include <stdlib.h>
int sq(int x) {
return x*x;
}
int main(int argc, char *argv[]) {
int i;
for (i = 1; i < argc; i++) {
int x = atoi(argv[i]);
int sx = sq(x);
printf("sq(%d) = %d\n", x, sx);
}
return 0;
}
测试结果
结果解释
第一行只a.out一个参数所以没有输出,i是从1开始的,1<1不成立,没有进入循环,没有输出。
int i;
for (i = 1; i < argc; i++)
第二个144<2147483647,第四个1600000000<2147483647正常输出 参数为50000时,正常情况是正数,但结果为负数,发生了溢出,同理65535。 参数为400000,500000时,平方数会更大,但结果为正数,只能说明平方数被截断之后的32位中第一位为0,所以是正数,而50000被截断后的32位中第一位是1所以为负数。