Week 1 隨堂測驗
姓名 *
學號 *
測驗 1
考慮以下 C 程式的 align4 巨集的作用是,針對 4-byte alignment,找到給定地址的 round up alignment address。

#include <stdio.h>
#define align4(x) (((x) + K) & (-4))
int main(void) {
    int p = 0x1997;
    printf("align4(p) is %08x\n", align4(p));
    return 0;
}

預期程式輸出 align4(p) is 00001998
作答區
K = ? *
25 points
測驗 2
考慮以下 C 程式可取得以 sizeof(int) 為 alignment 基礎的整數空間,也就是說,當 sizeof(int) 為 4 的時候:

給定 char arr[13];,INT_SIZE_OF(arr) 要得到 16;
給定 short int s;,INT_SIZE_OF(s) 要得到 4

#include <stdint.h>
#define INT_SIZE_OF(n) \
    ((sizeof(n) + sizeof(int) + X) & ~(sizeof(int) + Y))
作答區
X = ? *
25 points
Y = ? *
25 points
測驗 3
考慮以下 C 程式碼:

#include <stdbool.h>
bool func(unsigned int x) {
    return x && ((x & (~x + 1)) == x);      
}

改寫為以下等價的程式碼:

bool func(unsigned int x) {
    unsigned int unknown = 0;
    while(x && unknown <=1) {
        if ((x & Z) == 1)
            unknown++;
        x >>= 1;
   }
   return (unknown == 1);
}

請補完程式。
作答區
Z = ? *
25 points
Submit
Clear form
Never submit passwords through Google Forms.
This form was created inside of National Cheng Kung University. Report Abuse