/*使用位操作符来显示二进制*/ #include<stdio.h> char *itobs(int n, char *ps); void show_bstr(const char *); int invert_end(int num, int bits); int main(void) { char bin_str[8 * sizeof(int) + 1]; int number; puts("Enter intrgers and them in binary."); puts("Non-numberic input terminates program."); while(scanf("%d",&number) == 1) { itobs(number,bin_str); printf("%d is/n",number); show_bstr(bin_str); putchar('/n'); number = invert_end(number, 4); printf("Inverting the last 4 bits gives/n"); show_bstr(itobs(number,bin_str)); putchar('/n'); } puts("Bye!"); return 0; } char *itobs(int n, char *ps) { int i; static int size = 8 * sizeof(int); for(i = size - 1; i >= 0; i--,n >>= 1) { ps[i] = (01 & n) + '0'; } ps[size] = '/0'; return ps; } void show_bstr(const char * str) { int i = 0; while(str[i]) { putchar(str[i]); if(++i % 4 == 0 && str[i]) { putchar(' '); } } } int invert_end(int num, int bits) { int mask = 0; int bitval = 1; while(bits-- > 0) { mask |= bitval; bitval <<= 1; } return num^mask; } /*位字段*/ #include<stdio.h> /*是否透明和是否可见*/ #define YES 1 #define NO 0 /*边框线的样式*/ #define SOLID 0 #define DOTTED 1 #define DASHED 2 /*三原色*/ #define BLUE 4 #define GREEN 2 #define RED 1 /*混合颜色*/ #define BLACK 0 #define YELLOW (RED|GREEN) #define MAGENTA (RED|BLUE) #define CYAN (GREEN|BLUE) #define WHITE (RED|BLUE|GREEN) const char * colors[8] = {"black","red","green", "YELLOW","blue","magenta","cyan","white"}; struct box_props{ unsigned int opaque :1; unsigned int fill_color :3; unsigned int :4; unsigned int show_border :1; unsigned int border_color:3; unsigned int border_style:2; unsigned int :2; }; void show_settings(const struct box_props *pb); int main(void) { struct box_props box = {YES, YELLOW, YES, GREEN, DASHED}; printf("Original box settings:/n"); show_settings(&box); box.opaque = NO; box.fill_color = WHITE; box.border_color = MAGENTA; box.border_style = SOLID; printf("/nModified box settings:/n"); show_settings(&box); return 0; } void show_settings(const struct box_props *pb) { printf("Box is %s /n",pb->opaque == YES? "opaque": "transparent"); printf("The fill color is %s./n",colors[pb->fill_color]); printf("Border %s ./n", pb->show_border == YES? "shown": "not shown"); printf("The border color is %s./n",colors[pb->border_color]); printf("The border style is "); switch(pb->border_style) { case SOLID : printf("solid./n"); break; case DOTTED: printf("dotted/n"); break; case DASHED: printf("dashed/n"); break; default : printf("unknown type./n"); break; } } #include<stdio.h> #include<stdlib.h> #include<math.h> int itob(char * ps); int main(void) { char pbin[20]; puts("请输入二进制数/n"); gets(pbin); printf("十进制数为%d/n",itob(pbin)); return 0; } int itob(char * ps) { int count,b; int sum = 0; for(count = strlen(ps) - 1;count >= 0;count--) { b = *(ps++) -48; sum = sum + b * (pow((double)2,count)); } return sum; } #include<stdio.h> #include<math.h> #include<stdlib.h> int btoi(char *str); char *itos(int n); int main(int argc,char *argv[]) { int a,b; int a_1,b_1,anb,a_b,aob; char bstr[8* sizeof (int) + 1]; if(argc != 3) { printf("请使用2个命令行参数(二进制数)./n"); exit(1); } a = btoi(argv[1]); b = btoi(argv[2]); a_1 = ~a; b_1 = ~b; anb = a & b; a_b = a | b; aob = a ^ b; printf("~a is %s/n",itos(a_1,bstr)); printf("~b is %s/n",itos(b_1,bstr)); printf("a&b is %s/n",itos(anb,bstr)); printf("a|b is %s/n",itos(a_b,bstr)); printf("a^b is %s/n",itos(aob,bstr)); return 0; } int btoi(char * str) { int val = 0; while (*str != '/0') { val = 2 * val + (*str++ - '0');/*mark*/ } return val; } char *itos(int n,char *ps) { static int size = 8 * sizeof(int); int count; for(count = size - 1; count >= 0; count--, n>>=1) { ps[count] = (01 & n) + '0'; } ps[size] = '/0';/*mark*/ return ps; }