1. Write a function that converts a binary string into a numeric value. In other words, if you have the following statement:
char * pbin = "01001001";
Then you can pass Pbin as a parameter to the function, which returns the value of an int 25
#include <stdio.h>int bitoi (char *), int main (void) {char * Pbin = "00011001";p rintf ("Binary:%s equals 10 in Suppression:%d\n", Pbin, Bito I (Pbin));} int Bitoi (char * str) {int val = 0;while (*str! = ')//(2*val) 2 is incremented for its number of Val per run once each time the screen is added. val = 2 * val + (*str++-' 0 '); return Val;}
2. Write a program that reads two binary strings with command-line arguments and prints the result of using the ~ operator for each number, and the result of using the &, |, and ^ operators for these two numbers. Displays the result using a binary string.
#include <stdio.h> #include <string.h>//use 8-bit to test the value of INTSIZE to 9#define intsize 9int bitoi (char *); char * itobi (int); Int main (int argc, char * argv[] {Int n1, n2;n1 = bitoi (argv[1]), N2 = bitoi (argv[2]);p rintf ("Take anti \ n");p rintf ("%s\n %s\n ", argv[1], itobi (~N1));p rintf (" \n%s\n%s\n ", argv[2], itobi (~N2));p rintf (" \ n and \ n "); printf (" %s\n %s\n %s\n", argv[1], argv[2], itobi (N1&NBSP;&&NBSP;N2));p rintf ("\ n or \ n");p rintf (" %s\n %s\n %s\n", argv[1], argv[2], itobi (N1&NBSP;|&NBSP;N2)); printf ("\ n xor \ n");p rintf (" %s\n %s\n %s\n", argv[1], argv[2], itobi (n1 ^ &NBSP;N2));} Int bitoi (CHAR&NBSP;*&NBSP;STR) {int val = 0;while (*str != ')//(2*val) 2 for its number Val each time the run is incremented by a curtain. val = 2 * val + (*str++ - ' 0 '); return val;} Char *&nbSp;itobi (int n) {int i = 1;static char str[intsize];str[intsize - 1] = ';int j = intsize - 2;while ' (j >= 0) {str[j--] = (n & 1) + ' 0 '; n >>= 1;} Return str;}
3. Write a function that takes an int parameter and returns the number of bits opened in this parameter. Test the function in the program
#include <stdio.h>int open_count (int n); char * Itobi (int n); int main (void) {int i = 118191;printf ("Binary form of%d:%s\n", I , Itobi (i));p rintf (number of bits opened in "%d binary form:%d\n", I, Open_count (i)); return 0;} int open_count (int n) {int temp = 1;int I, Count = 0;for (i = 0; i < 8 * sizeof (int); i++) {if (N & temp) Count++;n &G T;>= 1;} return count;} char * Itobi (int n) {int i = 1;static char str[8 * sizeof (int)];str[8 * sizeof (int)-1] = ' + '; int j = 8 * sizeof (int) -2;whi Le (J >= 0) {str[j--] = (N & 1) + ' 0 '; n >>= 1;} return str;}
15_4. Write a function that accepts two int parameters: a value and the position of a bit. If the value on the specified bit is 1, the
The function returns 1, otherwise 0 is returned. Test the function in the program.
#include <stdio.h> #include <stdlib.h> #define INTSIZE (sizeof (int) * 8) Int fun (int n, int b); Char * itobi (int n); Int main (void) {int num = 123234;int bit = 13;if (bit > intsize | | bit <= 0) {printf ("the number of digits out of range \ n"); exit (exit_failure);} printf ("Binary form of%d:%s\n", num, itobi (num));p rintf (%d bits in%d binary form:%d\n ", num, bit, fun ( Num, bit)); return 0;} Int fun (int n, int b) {int i = 1;n >>= b - 1;if (N & i) return 1;return 0;} Char * itobi (int n) {int i = 1;static char str[8 * sizeof (int )];str[8 * sizeof (int) -1] = ' + '; int j = 8 * sizeof (int) -2;while (j >= 0) {str[j--] = (n & 1) + ' 0 '; n > >= 1;} Return str;}
5. Writes a function that rotates all bits in a unsigned int to the left by the specified number of bits.
For example, rotate_l (x,4) moves all the bits in X to the left by 4 positions, and the missing bits from the left end appear again at the right end. In other words, the bits removed from the high position are placed low. Test the function in the program.
#include <stdio.h> #define UINTSIZE (sizeof (unsigned int) * 8) unsigned int rotate_l (unsigned int x, int n); char * Itob I (int n); int main (void) {unsigned int num = 4123456;int bit = 6;printf ("%s\n", Itobi (num));p rintf ("%s\n", Itobi (rotate_l (n (um, bit)));} char * Itobi (int n) {int i = 1;static char str[uintsize+1];str[uintsize] = ' n '; int j = uintsize-1;while (J >= 0) {str[j- -] = (n & 1) + ' 0 '; n >>= 1;} return str;} unsigned int rotate_l (unsigned int x, int n) {unsigned int y;y = x >> (uintsize-n); x <<= N;return x | y;}
6. Design a bit field structure to store the following information:
A number of Font id:0 to 255
A number of Font size:0 to 127
Bold:off (0) or on (1)
Italic:off (0) or on (L)
Underline:off (0) or on (1)
Use this structure in your program to display font parameters, and use a looping menu to let the user change the parameters. For example, a running example of a program is as follows:
ID SIZE ALIGNMENT B I U
1 left off off
f) Change font s) change size a) change alignment
b) Toggle Bold i) Toggle italic u) Toggle Underline
Q) quit
S
Enter font Size (0-127): 36
ID SIZE ALIGNMENT B I U
1. Left off off
f) Change font s) change size a) change alignment
b) Toggle Bold i) Toggle italic u) Toggle Underline
Q) quit
A
Select Alignment:
L) left C) Center R) Right
R
ID SIZE ALIGNMENT B I U
1 + right off off
f) Change font s) change size a) change alignment
b) Toggle Bold i) Toggle italic u) Toggle Underline
Q) quit
I
ID SIZE ALIGNMENT B I U
1 + right off on off
f) Change font s) change size a) change alignment
b) Toggle Bold i) Toggle italic u) Toggle Underline
Q) quit
Q
bye!
A program should use the & operator and the appropriate mask to ensure that the font ID and font size information are converted to the specified range.
#include <stdio.h> #include <string.h> #define left 0#define center 1# Define right 2#define off 0#define on 1#define fontid 0xff#define fontsize 0x7ftypedef struct box{unsigned int font_id : 8;// A number between 0 and 255 font idunsigned int font_size : 7;//0 to 127 for a number font size Unsigned int align : 2;//left (0) or right (1) align Unsigned int bold : 1;//off (0) or on (1) Blackbody Unsigned int italic : 1;//off (0) or on (l) Italic unsigned int underline : 1;//off (0) or on (1) underline}box;void show_box (Const box * pbox); Int menu ( void); Int get_ch (CHAR&NBSP;*&NBSP;STR); void get_id (Box * pbox); Void get_size (BOX * pbox); void set_align (Box * pbox); Int main (void) {box box_info = { 1, 12, left, off, off, off };char ch;show_box (&box_info);while ((Ch = menu ()) != ' Q ') {switch (CH) {case ' F ': get_id (&box_info);break;case ' s ': get_size (&box_info); break;case ' a ': Set_align (&box_info);break;case ' B ': Box_info. Bold = ~box_info. bold;break;case ' i ': box_info. Italic = ~box_info. italic;break;case ' u ': box_info. Underline = ~box_info. underline;break;default:printf ("\nerror!\n");} printf ("\ n"); Show_box (&box_info);} printf ("bye!\n"); return 0;} Void show_box (Const box * pbox) {char *a[] = { "LETF", "center", " Right " };char *b[] = { " off ", " on " };char *i[] = { " off ", " on " };char *u[] = { " Off ", " on "&NBSP;};p rintf (" ID SIZE alignment b i u \n ");p rintf ("%3d %4d %9s %3s %3s %3s\n ", pbox->font_id, pbox->font_size,a[pbox->align], b[pbox-> Bold], i[pbox->italic], u[pbox->underline]);} Int menu (void) {puts ("f) change font s) change size A) change alignment ");p UTS (" b) toggle bold i) toggle italic u) Toggle underline ");p UTS (" Q) Quit "); Return get_ch (" Fsabiuq ");} Int get_ch (CHAR&NBSP;*&NBSP;STR) {int ch;while (Ch = getchar (), &NBSP;STRCHR (str, CH) == null) {while (GetChar () != ' \ n ');p rintf ("error! please enter (%s ): ", str);} while (GetChar () != ' \ n '); return ch;} VOID&NBSP;GET_ID (Box * pbox) {int f;do{printf ("Enter font id (0-255):"); scanf ("%d", &NBSP;&F);} while (f > 255 | | f < 0);p Box->font_id = f & fontid;while (GetChar () != ' \ n '); Void get_size (Box * pbox) {int s;do{printf ("Enter font id (0-255):"); scanf ("%d", &s);} while (s > 127 | | s < 0);p box->font_size = s & fontsize;while (GetChar () != ' \ n ');} Void set_align (Box * pbox) {puts ("SELECT&NBSP;ALIGNMENT&NBSP;:");p UTS ("L) left c ) center r);switch (get_ch ("LCR") {case ' l ':p box->align = left; break;case ' C ':p box->align = center; break;case ' r ':p box->align = right; break;default:printf ("\nerror\n");}}
7. Write a program that is identical to the functionality described in Exercise 6. Use a unsigned long to save the font information, and use the bitwise operator instead of the bit member to manage the information.
#include <stdio.h> #include <string.h> #define FONTID 0x00FF#define fontsize 0x7f00#define align 0x18000#define left 0x00000#define center 0x08000#define right 0x10000#define bold 0x20000#define italic 0x40000#define underline 0x80000void show_box (unsigned long f); Int menu (void); Int get_ch ( CHAR&NBSP;*&NBSP;STR); void get_id (Unsigned long * pfont); Void get_size (unsigned Long * pfont); void set_align (Unsigned long * pfont); Int main (void) {unsigned long font = 1 | (12<<8) | LEFT | BOLD | Italic | underline;char ch;show_box (font);while ((Ch = menu ()) != ' Q ') {switch (CH) {case ' F ': get_id (&font);break;case ' s ': Get_size (&font);break;case ' a ': Set_align (&font);case ' B ':font ^= bold;break;case ' I ':font ^= italic;break;case ' u ': Font ^= underline;break;default:printf ("\nerror!\n");} printf ("\ n"); Show_box (font);} printf ("bye!\n"); return 0;} Void show_box (unsigned long f) {printf (" id size alignment b i u \n ");p rintf ("%4d %4d ", f & fontid, (f & fontsize) >>8);switch (f & align) {case left: printf ("%9s", "left"), break;case right: printf ("%9s", "right"); break;case center: printf ("%9s", "center") break;default: printf ("%9s", "Unknown"); break;} printf (" %3s %3s %3s\n\n", (f & bold) == BOLD ? "Off" : "On", (f & italic) == ITALIC ? "Off" : "on", (f & underliNE) == UNDERLINE ? "Off" : "on";} Int menu (void) {puts ("f) change font s) change size A) change alignment ");p UTS (" b) toggle bold i) toggle italic u) Toggle underline ");p UTS (" Q) Quit "); Return get_ch (" Fsabiuq ");} Int get_ch (CHAR&NBSP;*&NBSP;STR) {int ch;while (Ch = getchar (), &NBSP;STRCHR (str, CH) == null) {while (GetChar () != ' \ n ');p rintf ("error! please enter (%s ): ", str);} while (GetChar () != ' \ n '); return ch;} VOID&NBSP;GET_ID (Unsigned long * pfont) {int f;do{printf ("Enter font id (0-255):") ; scanf ("%d", &f);} while (f > 255 | | &NBSP;F&NBSP;<&NBSP;0); f = f & fontid;*pfont &= ~fontid;*pfont | = f;while (GetChar () != ' \ n '); Void gEt_size (Unsigned long * pfont) {int s;do{printf ("Enter font id (0-255):"); scanf ("% D ", &s);} while (s > 127 | | s < 0);s = (s << 8) & fontsize;*pfont &= ~FONTSIZE;*pfont |= s;while (GetChar () != ' \ n ');} Void set_align (Unsigned long * pfont) {puts ("SELECT&NBSP;ALIGNMENT&NBSP;:");p UTS ("L) left &NBSP;&NBSP;&NBSP;C) center r);switch (get_ch ("LCR")) {case ' l ':* pfont &= ~ALIGN; *pfont |= LEFT; break;case ' C ':* pfont &= ~align; *pfont |= CENTER; break;case ' R ':* pfont &= ~align; *pfont |= right; break;default:printf ("\nerror\n");}}
This article is from the "30 years old school Programming" blog, please be sure to keep this source http://xiongyi85.blog.51cto.com/8756903/1660958
C Primer Plus (Fifth Edition) 15th chapter position Operation programming Exercise