编辑代码

#include <stdio.h>
static int domain_mask[4][1000];
static int cache[4][1000];
int main () {
    int stride = 500;
    int count = 200;

    int pernum = 43;

    int j = 0, m = 0;
    int k = 0, n = 0;
    int u = 0;
    for (;u < 500 * 32; k++,m++,u++) {
        if (k >= 32) {
            k = 0;
            n++;
        }
        if (m >= pernum) {
            m = 0;
            j++;
        }
        if (j >= 4) {
            j = 0;
        }
        domain_mask[j][n] |= 1 << k;
        //printf("j:%d, n:%d, k:%d,domain_mask:%p\n", j, n, k, domain_mask[j][n]);
    }
    for (int g = 0; g < 500; g++) {
        printf("g:%d\n", g);
        printf("%x\t", domain_mask[0][g]);
        printf("%x\t", domain_mask[1][g]);
        printf("%x\t", domain_mask[2][g]);
        printf("%x\t", domain_mask[3][g]);
        printf("\n");
        cache[0][g]=domain_mask[0][g];
        cache[1][g]=domain_mask[1][g];
        cache[2][g]=domain_mask[2][g];
        cache[3][g]=domain_mask[3][g];
    }

    int type_set = 0;

    int begin_word_bit = stride - (stride / 32)* 32 ;
    int len_words = (count - (32 - begin_word_bit)) / 32 ;
    int end_word_bit = (stride + count) % 32;

    int word = stride / 32;
    int num_word = word % pernum;
    int begin = stride / 32;
    int end = (stride + count) / 32;
    unsigned int msk_begin = 0xffffffff << begin_word_bit;
    unsigned int msk_end = 0xffffffff << end_word_bit;
    int origin_begin;
    int origin_end;
    printf("begin:%d,begin_bit:%d,end:%d,end_bit:%d\n",begin, begin_word_bit, end, end_word_bit);
    int i = 0;
    for (; i < 4; i++) {
        origin_begin = cache[type_set + i][begin];
        origin_begin |= domain_mask[i][begin % pernum] & msk_begin;
        cache[type_set + i][begin] = origin_begin;
        origin_end = cache[type_set + i][end];
        origin_end |= domain_mask[i][end % pernum] & (~ msk_end);
        printf("i:%d,end:%d,~msk:%x\n",i, end, ~msk_end);
        cache[type_set + i][end] = origin_end;
    }
    word = word + 1;
    num_word = word;
    int size = word + len_words ;
    for (; word < size ; word ++, num_word ++) {
        if (num_word >= pernum) {
            num_word = num_word % pernum;
        }
        cache[type_set][num_word] = domain_mask[0][num_word];
        cache[type_set + 1][num_word] = domain_mask[1][num_word];
        cache[type_set + 2][num_word] = domain_mask[2][num_word];
        cache[type_set + 3][num_word] = domain_mask[3][num_word];
    }
    printf("Hello world!     - c.jsrun.net.\n");
    for (int g = 0; g < 500; g++) {
       /* printf("g:%d\n", g);
        printf("%x\t", cache[0][g]);
        printf("%x\t", cache[1][g]);
        printf("%x\t", cache[2][g]);
        printf("%x\t", cache[3][g]);
        printf("\n");*/
    }
    return 0;
}