3.54
int decode2(int x, int y, int z) {
int tmp = z - y;
tmp <<= 15;
tmp >>= 15;
return tmp * (x ^ tmp);
}
3.55
3.58
int switch(int *p1, int *p2, mode_t action)
{
int result = 0;
switch(action) {
case MODE_A:
result = *p1;
*p1 = *p2;
break;
case MODE_B:
result = *p1 + *p2;
*p = result;
break;
case MODE_C:
*p2 = 15;
result = *p1;
break;
case MODE_D:
*p2 = *p1;
case MODE_E:
result = 17;
break;
default: result = -1;
}
return result;
}
3.59
case 40:
case 42:
result = x << 3;
break;
case 43:
int tmp = x * 7;
result = tmp * tmp + 0x11;
break;
case 44:
result = x >> 3;
break;
case 45:
result = x * x + 0x11;
break;
default: result += 0x11;
3.60:
A: i*S*T + j*T + k
B: 11, 7, 9
3.61
int var_prod_ele(int n, int A[n][n], int B[n][n], int i, int k)
{
int *Ap = A + i * n;
int *Bp = B + k;
int result = 0;
int stepB = n << 2;
while(n > 0) {
int i = *Bp;
i = (*Ap) * i;
result += i;
Ap += 1;
Bp = ((int)Bp) + stepB;
n--;
}
return result;
}
3.62
void transpose(int M,int A[M][M]) {
int i, j;
for(i = 0; i < M; i++) {
int *a = A[i][0];
int *b = A[0][i];
for(j = 0; j < i; j++) {
int i = *a;
*a = *b;
*b = i;
a++;
b += M
}
}
}
3.63
E1(n) = 3 * n
E2(n) = 2 * n - 1
3.64
A:
8(%ebp) => result
12(%ebp) => s1.p
16(%ebp) => s1.v
B: before call word_sum
stack |
---|
%ebp |
s2.sum |
s2.prod |
s1.p |
s1.v |
the position of s2 (%ebp - 8) |
3.65
A = 3, B = 7
3.66
A:CNT = 7
B:
typedef struct {
int idx;
int x[6];
} a_struct;
3.67
A: 0,4,0,4
B:8byte
C:
up->e2.next->e1.x = *(up->e2.next->e1.p) - up->e2.y;
3.68
#include<stdio.h>
#define CAPACITY 10
int is_end(char *buffer){
int i;
for(i = 0; i < CAPACITY; i++)
if(buffer[i] == '\n')
return 1;
return 0;
}
int main() {
char buffer[CAPACITY];
do{
if(fgets(buffer,CAPACITY,stdin) != NULL)
fputs(buffer, stdout);
else {
printf("something is wrong!!\n");
return 0;
}
}while(!is_end(buffer));
return 0;
}
3.69
long trace(tree_ptr tp) {
if(tp == NULL) return 0;
while(tp -> left != NULL)
tp = tp->left;
return tp->val;
}
3.70
//find the biggest node of the tree
long traverse(tree_ptr tp) {
if(tp == 0) return 0x8000000000000000;
long ans = tp->val;
long left = traverse(tp -> left);
long right = traverse(tp -> right);
ans = ans > left ? ans : left;
ans = ans > right ? ans : right;
return ans;
}