第一题:
#include#include int main() { char a[1000] = { 0 }; int i = 0; for (i = 0; i < 1000; i++) { a[i] = -1 - i; } printf("%d", strlen(a)); return 0; }
char的取值范围是 -128~127
也就是运行结果刚开始肯定是-1、-2、-3.......-128、127、126....2、1、0
strlen的函数就是寻找 ,所以最后结果是128+127=255
第二题:
0x1234---》0x00 00 12 34翻译成二进制:
0000 0000 0000 0000 0001 0010 0011 0100
int转化为char,发生整型提升
0011 0100
0000 0000 0000 0000 0000 0000 0011 0100
转化成十六进制:0x 00 00 00 34
这个是大端存放,不难看出结果是A、0x00
第三题:
最主要是文字转化成程序的能力
#includeint main() { char killer = 'A'; for (killer = 'A';killer <= 'D';killer++) { if ((killer != 'A') + (killer == 'C') + (killer == 'D') + (killer != 'D') == 3) { printf("凶手是:%cn", killer); } } return 0; }
要熟悉ASCii码表,不然想不到这个方法
第四题:
#include#include int main() { int A = 0; int B = 0; int C = 0; int D = 0; int E = 0; for (A = 0;A <= 5;A++) { for (B = 0;B <= 5;B++) { for (C = 0; C<= 5; C++) { for (D = 0;D <= 5;D++) { for (E = 0;E <= 5;E++) { if (((B == 2) + (A == 3) == 1 && (B == 2) + (E == 4) == 1 && (C == 1) + (D == 2) == 1 && (C == 5) + (D == 3) == 1 && (E == 4) + (A == 1) == 1) == 1); { if (A * B * C * D * E == 120) printf("A=%d B=%d C=%d D=%d E=%d", A, B, C, D, E); } } } } } } return 0; }
第五题:
200的二进制: 1100 1000
100的二进制:0110 0100
c的二进制: 10010 1100(长了,会发生截断)
因为要用%d打印,所以会 发生截断
先看c 截断:0010 1100
整型提升:0000 0000 0000 0000 0000 0000 00010 1100
翻译过来就是44
a+b的二进制是 10010 1100
因为是unsingned char,所以高位全部补0,
0000 0000 0000 0000 0000 0001 0010 1100
翻译过来就是300
第六题:



