`
dawuafang
  • 浏览: 1100263 次
文章分类
社区版块
存档分类
最新评论

C Primer Plus(第五版)第15章 位操作

 
阅读更多
15.1
#include<stdio.h>
#include<string.h>
int toint(char*);
int main(void)
{
printf("%d",toint("0011100"));
return 0;
}
int toint(char*p)
{
int l=strlen(p);
int i,j,sub,total;
for(i=0,total=0;i<l;i++)
{
for(j=0,sub=1;j<i;j++)
sub*=2;
total+=(p[l-i-1]-48)*sub;
}
return total;
}

15.2
#include<stdio.h>
#include<string.h>
int toint(char*);
void tostring(unsigned);
int main(int num,char **p)
{
int i,j;
i=toint(p[1]);
j=toint(p[2]);
tostring(i);
tostring(~i);
tostring(j);
tostring(~j);
tostring(i&j);
tostring(i|j);
tostring(i^j);
return 0;
}
int toint(char*p)
{
int l=strlen(p);
int i,j,sub,total;
for(i=0,total=0;i<l;i++)
{
for(j=0,sub=1;j<i;j++)
sub*=2;
total+=(p[l-i-1]-48)*sub;
}
return total;
}
void tostring(unsigned t)
{
int l=sizeof(int)*8;
int i;
for(i=0;i<l;i++)
{
if(i%8==0)printf(" ");
printf("%d",(1u<<l-1-i&t)>>l-i-1);
}
puts("");
}

15.3
#include<stdio.h>
int open(int);
int main(void)
{
printf("%d",open(31));
return 0;
}
int open(int i)
{
int l=sizeof(int)*8;
int j,k;
k=0;
for(j=0;j<l;j++)
if((1u<<j&i)>>j==1)
k++;
return k;
}

15.4
#include<stdio.h>
int main(void)
{
printf("%d",ifopen(8,2));
return 0;
}
int ifopen(int num,int position)
{
if((1u<<position&num)>>position==1)
return 1;
return 0;
}

15.5
#include<stdio.h>
int rotate(unsigned,int);
int main(void)
{
printf("%u",rotate(1,31));
return 0;
}
int rotate(unsigned x,int num)
{
int i;
for(i=0;i<num;i++)
{
if((1u<<31&x)>>31==1)
{
x<<=1;
x+=1;
}
else
x<<=1;
}
return x;
}

15.6
#include<stdio.h>
struct font
{
unsigned id:8;
unsigned size:7;
unsigned alignment:2;
unsigned bold:1;
unsigned italic:1;
unsigned underline:1;
};
void menu(void);
int main(void)
{
char c;
char *p[3]=
{
"left",
"center",
"right"
};
struct font fuck={1,12};
puts("ID SIZE ALIGNMENT B I U");
printf("%d %d %s %s %s %s",
fuck.id,fuck.size,p[fuck.alignment],fuck.bold?"on":"off",fuck.italic?"on":"off",fuck.underline?"on":"off");
puts("");
puts("");
menu();
scanf(" %c",&c);
while(getchar()!='\n')
;
while(c!='q')
{
switch(c)
{
case 'a':
puts("Select alignment:");
puts("l)left c)center r)right");
scanf(" %c",&c);
while(getchar()!='\n')
;
switch(c)
{
case 'l':
fuck.alignment=0;
break;
case 'c':
fuck.alignment=1;
break;
case 'r':
fuck.alignment=2;
break;
default:
puts("wrong");
break;
}
break;
case 'b':
fuck.bold=1;
break;
case 'f':
{
int f;
printf("Enter the font number (0-255): ");
scanf(" %d",&f);
fuck.id=f&255;
while(getchar()!='\n')
;
break;
}
case 'i':
fuck.italic=1;
break;
case 's':
{
int f;
printf("Enter the font size (0-127): ");
scanf(" %d",&f);
fuck.size=f&127;
while(getchar()!='\n')
;
break;
}
case 'u':
fuck.underline=1;
break;
default:
puts("wrong");
break;
}
puts("");
puts("ID SIZE ALIGNMENT B I U");
printf("%d %d %s %s %s %s",
fuck.id,fuck.size,p[fuck.alignment],fuck.bold?"on":"off",fuck.italic?"on":"off",fuck.underline?"on":"off");
puts("");
menu();
scanf(" %c",&c);
while(getchar()!='\n')
;
}
puts("Bye!");
return 0;
}
void menu(void)
{
puts("f)change font s)change size a)change alignment");
puts("b)toggle bold i)toggle italic u)toggle underline");
puts("q)quit");
}

15.7
#include<stdio.h>
#define id 12
#define idmask 255
#define size 5
#define sizemask 127
#define alignment 3
#define alignmentmask 3
#define bold 2
#define mask 1
#define italic 1
#define underline 0
void menu(void);
int main(void)
{
unsigned long fuck=0;
char c;
char *p[3]=
{
"left",
"center",
"right"
};
fuck|=1u<<id;
fuck|=12u<<size;
puts("ID SIZE ALIGNMENT B I U");
printf("%d %d %s %s %s %s",
(fuck&idmask<<id)>>id,(fuck&sizemask<<size)>>size,p[(fuck&alignmentmask<<alignment)>>alignment],
(fuck&mask<<bold)?"on":"off",(fuck&mask<<italic)?"on":"off",(fuck&mask<<underline)?"on":"off");
puts("");
puts("");
menu();
scanf(" %c",&c);
while(getchar()!='\n')
;
while(c!='q')
{
switch(c)
{
case 'a':
puts("Select alignment:");
puts("l)left c)center r)right");
scanf(" %c",&c);
while(getchar()!='\n')
;
switch(c)
{
case 'l':
fuck&=~(alignmentmask<<alignment);
break;
case 'c':
fuck&=~(alignmentmask<<alignment);
fuck|=1u<<alignment;
break;
case 'r':
fuck&=~(alignmentmask<<alignment);
fuck|=2u<<alignment;
break;
default:
puts("wrong");
break;
}
break;
case 'b':
fuck|=1u<<bold;
break;
case 'f':
{
int f;
printf("Enter the font number (0-255): ");
scanf(" %d",&f);
fuck&=~(idmask<<id);
fuck|=(f&255)<<id;
while(getchar()!='\n')
;
break;
}
case 'i':
fuck|=1u<<italic;
break;
case 's':
{
int f;
printf("Enter the font size (0-127): ");
scanf(" %d",&f);
fuck&=~(sizemask<<size);
fuck|=(f&127)<<size;
while(getchar()!='\n')
;
break;
}
case 'u':
fuck|=1u<<underline;
break;
default:
puts("wrong");
break;
}
puts("");
puts("ID SIZE ALIGNMENT B I U");
printf("%d %d %s %s %s %s",
(fuck&idmask<<id)>>id,(fuck&sizemask<<size)>>size,p[(fuck&alignmentmask<<alignment)>>alignment],
(fuck&mask<<bold)?"on":"off",(fuck&mask<<italic)?"on":"off",(fuck&mask<<underline)?"on":"off");
puts("");
menu();
scanf(" %c",&c);
while(getchar()!='\n')
;
}
puts("Bye!");
return 0;
}
void menu(void)
{
puts("f)change font s)change size a)change alignment");
puts("b)toggle bold i)toggle italic u)toggle underline");
puts("q)quit");
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics