1. 題目:請編寫一個c函數,該函數給出一個字節中被置為1的位的個數
/*****************************************************copyright (C), 2016-2017, Lighting Studio. Co., Ltd. File name:Author:luoye Version:0.1 Date: Description:Funcion List: *****************************************************/#include <stdio.h>int main(){ int num, mask; int count=0, i; PRintf("Please enter a number: "); scanf("%d",&num); mask=1<<7; for(i=0;i<8;i++) { if(num&mask) { count++; } num<<=1; } printf("The 1 number is %d/n",count); return 0;}2.題目:輸入一個整數a,再輸入兩個整數p1,p2(p1,p2<32),輸出該整數的二進制表示方法中從右端開始的p1到p2位.
/*****************************************************copyright (C), 2016-2017, Lighting Studio. Co., Ltd. File name:Author:luoye Version:0.1 Date: Description:Funcion List: *****************************************************/#include <stdio.h>int main(){ int num, num1, num2, mask, i; printf("Please enter a number:"); scanf("%d",&num); printf("Please enter two number(number<32):"); scanf("%d%d",&num1,&num2); mask = 1<< num2-1; for(i = num1; i <= num2; i++) { putchar(num&mask ? '1' : '0'); mask >>= 1; } printf("/n"); return 0;}3.題目:輸入一個整數a,再輸入兩個整數p1,p2(p1,p2<32),將該整數的二進制表示方法中從右端開始的p1到p2位取反后輸出
/*****************************************************copyright (C), 2016-2017, Lighting Studio. Co., Ltd. File name:Author:luoye Version:0.1 Date: Description:Funcion List: *****************************************************/#include <stdio.h>int main(){ int num, num1, num2, mask, i; printf("Please enter a number:"); scanf("%d",&num); printf("Please enter two number(number<32):"); scanf("%d%d",&num1,&num2); mask = 1<< num2-1; for(i = num1; i <= num2; i++) { putchar( num & mask ? '0' : '1'); mask >>= 1; } printf("/n"); return 0;}4. 題目:輸入一個整數a,再輸入兩個整數p(p<32),v(0|1),將該整數a的p位設置為v,輸出修改后的該整數的二進制表示.
/*****************************************************copyright (C), 2016-2017, Lighting Studio. Co., Ltd. File name:Author:luoye Version:0.1 Date: Description:Funcion List: *****************************************************/#include <stdio.h>int main(){ int num, num1, num2, i; int mask_0, mask_1, mask; printf("Please enter a number: "); scanf("%d",&num); printf("Please enter a number(number<32): "); scanf("%d",&num1); printf("Please enter a number(number 0|1): "); scanf("%d",&num2); if( num2 == 1) { mask_1 = 1<<num1-1; //生成一個指定位數1,其他位數為0的掩碼 num = num | mask_1; } else { mask_0 = 1<<num1-1; mask_0 = ~mask_0; //生成一個指定位數為0,其他位數為1的掩碼 num = num & mask_0; } mask =1<<31; for(i=0;i<32;i++) { putchar( num & mask ? '1' : '0'); num <<=1; } printf("B/n"); return 0;}5.題目:輸入一個32位的整數a,使用按位異或^運算,生成一個新的32位整數b,使得該整數b的每一位等于原整數a中該位左右兩邊兩個bit位的異或結果。
提示:0 ^ 0 = 0; 1 ^ 1 = 0; 0 ^ 1 = 1; 1 ^ 0 = 1;
/*****************************************************copyright (C), 2016-2017, Lighting Studio. Co., Ltd. File name:Author:luoye Version:0.1 Date: Description:Funcion List: *****************************************************/#include <stdio.h>int main(){ int num, num1, mask, mask_p, i; //num為原來的數 num1為最后得出的數 int temp[34]; int sum = 1; temp[0] = 0; //默認32位的前面后面都為0 temp[33] = 0; printf("Please enter a number: /n"); scanf("%d",&num); mask = 1<<31; for( i = 1; i <= 32; i++) { temp[i] = (num & mask ? 1 : 0 ); num <<=1; }// 輸出原數的二進制表示// for( i = 0; i < 34; i++)// {// printf("%d",temp[i]);// }// printf("/n");//相鄰兩位取異或 num1 = 0; for( i = 32; i >=1; i--) { num1 += (temp[i - 1] ^ temp [i+1]) * sum; sum *= 2 ; //sum表示二的次方用來得到結果數b } mask_p = 1<<31; for( i = 0; i < 32; i++) { putchar(num1 & mask_p ? '1' : '0'); //輸出結果數的二進制表示 num1 <<=1; } printf("/n"); return 0;}
新聞熱點
疑難解答