示例#1
0
文件: main.cpp 项目: CCJY/coliru
int main (int argc, char **argv)
{
    char **population; //include every parent that is about to have childen
    //long long type can represent upto 20 bits of 1 and 0, 
    //chroms longer than 20bits will be splited to array of long long numbers
   char chrom1[] = "10101010001101011";
   char chrom2[] = "11010000110010010";
   int length = sizeof(chrom1)-1;
   double crossover = (double)0.5; //this determines the crossover point in chrom
   
   //generate mask for crossover
   char *mask1 = (char *) malloc(length*sizeof(char));
   char *mask2 = (char *) malloc(length*sizeof(char));
   generate_mask(mask1, mask2, length, crossover);
   printf("input  1: %15s (%d) 2: %15s (%d) Length: %d\n", chrom1, fitness(chrom1,length), chrom2, fitness(chrom2, length), length);
   printf("masks  1: %15s 2: %15s\n", mask1, mask2);
   char *ptr1,*ptr2;

    //convert the above 4 string values to decimal int following binary rule.
   long long ret1 = strtoul(chrom1, &ptr1, 2);
   long long ret2 = strtoul(chrom2, &ptr2, 2);
   long long m1 = strtoul(mask1, &ptr1, 2);
   long long m2 = strtoul(mask2, &ptr2, 2);
   
   //crossover operation 
   long long ichild1 = (ret1 & m2) ^ (ret2 & m1);
   long long ichild2 = (ret1 & m1) ^ (ret2 & m2);
   //convert binary format childern to string, in order to add them to parent pool.
   char *child1 = (char *)malloc(length * sizeof(char));
   char *child2 = (char *)malloc(length * sizeof(char));
   sprintf(child1,"%lld",int_to_binary(ichild1));
   sprintf(child2,"%lld",int_to_binary(ichild2));
   
   printf("child 1: %18s 2: %s",child1,child2);

   return 0;
}
示例#2
0
int main()
{
        float f_num;
        int i_num;
        unsigned int ui_num;
        int i, N;

        scanf("%d", &N);

        while (N--) {
                scanf("%f", &f_num);
                i_num = (int)f_num;
                ui_num = (unsigned int)abs(i_num);
                printf("float: %f | int: %d | unsigned int: %d\n\n", f_num, i_num, ui_num);

                printf("float->binary: %s\n", float_to_binary(f_num));
                printf("integer->binary: %s\n", int_to_binary(i_num));
                printf("(simple)integer->binary: %s\n", simple_int_to_binary(i_num));
                printf("unsigned integer->binary: %s\n", unsigned_int_to_binary(ui_num));
        }

        return 0;
}
示例#3
0
int B() {
    const int SIZE = 4096;
    const char *name = "OS";
    int shm_fd;
    void *ptr;
    int i,result;
    static int binary[1000];
    static int ten[1000];
    static int  count[1000];
    static int index=0;
    // read from SM and convert to bunary
    shm_fd = shm_open(name, O_RDONLY,0666);
    if(shm_fd == -1){
        printf("shared memory failed\n");
        exit(-1);
    }
    
    
    ptr = mmap(0, SIZE, PROT_READ, MAP_SHARED, shm_fd, 0);
    if(ptr == MAP_FAILED){
        printf("Map Failed\n");
        exit(-1);
    }
    
    
    i = atoi(ptr);
    
    if(i==-1){ //取最大輸出
        int max = 0;
        for(int b=0;b<index;b++){
            if(count[b]>max){
                max=count[b];
            }
        }
        shm_fd = shm_open(name, O_CREAT|O_RDWR,0666);
        
        
        ftruncate(shm_fd, SIZE);
        ptr = mmap(0, SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, shm_fd, 0);
        if(ptr == MAP_FAILED){
            printf("Map Failed\n");
            return -1;
        }
        
        for(int c=0;c<index;c++){
            if(count[c]==max){
                sprintf(ptr,"%d:%d;",ten[c],binary[c]);
                ptr+=strlen(ptr);
            }
        }
        
    }else if(i==-2){  //取最小輸出
        int min=count[0];
        for(int j=1;j<index-1;j++){
            if(min>count[j]){
                min=count[j];
            }
        }
        
        shm_fd = shm_open(name, O_CREAT|O_RDWR,0666);
        
        ftruncate(shm_fd, SIZE);
        ptr = mmap(0, SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, shm_fd, 0);
        if(ptr == MAP_FAILED){
            printf("Map Failed\n");
            return -1;
        }
        for(int g=0;g<index-1;g++){
            if(count[g]==min){
                sprintf(ptr,"%d:%d;",ten[g],binary[g]);
                ptr+=strlen(ptr);
            }
        }
        
    }
    else{
        
        result= int_to_binary(i);
        
        
        
        //write result back to SM
        
        shm_fd = shm_open(name, O_CREAT|O_RDWR,0666);
        
        
        ftruncate(shm_fd, SIZE);
        ptr = mmap(0, SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, shm_fd, 0);
        if(ptr == MAP_FAILED){
            printf("Map Failed\n");
            return -1;
        }
        
        
        sprintf(ptr,"%d:%d;",i,result);
        
        //store all int and binary
        ten[index]=i;
        binary[index]=result;
        
        
        
        //store the binary to string (for compare later)
        
        count[index] = count1s(i);
        
        
        index++;
        
    }
    
    
    
    return 0;
}
示例#4
0
int int_to_binary(int k) {
    if (k == 0) return 0;
    if (k == 1) return 1;                       /* optional */
    return (k % 2) + 10 * int_to_binary(k / 2);
}
示例#5
0
文件: main.cpp 项目: CCJY/coliru
//convert decimal int to binary format int which is represented in a decimal format.
//only for display, cannot be used for computing.
unsigned long long int_to_binary(unsigned long long k) {
    return (k == 0 || k == 1 ? k : ((k % 2) + 10 * int_to_binary(k / 2)));
}