一道面试题,紧急求助。
#include <stdio.h> int main() { long long z = 1744489229594965; int a, b, c, x; b = (z&1) << 4; a = b--; c = a - b; x = b - a; char o[32]; while (z) { x = x&a? a&b : c+x; if (!(z/a&b^x)) { o[z&b^x] = (char) x+6*a+b/5-c; z = z/a/a; } } printf("%sn", o); getchar();return 0; } //容易得到a,b,c,x的初始值:a = 15; //a=0x0Fb = 16; //b=0x10c = 1; //c=0x01x = -1; //x=0xFFFFFFFF//可知(a&b)是常数0, c是常数1x = x&a ? a&b : c+x;==>x = x&a ? 0 : x+1;==>x = x>15 ? 0 : x+1;//虽然第一次运算时,x+1的值为0,但并不表示x恒为0。
[解决办法]
x=x&a?0:1+x