• 1. 位运算www.mingribook.com
  • 2. 取一个整数的后4位 在屏幕上输入一个8进制数,实现输出其后4位对应的数。(范例位置:光盘\TM\fl\10\1) #include void main() { unsigned a,rs; /*声明无符号变量*/ printf("请输入一个八进制数:"); scanf("%o",&a); /*输入一个8进制数*/ rs=~(~0<<4); /*构造一个后4位为1的数*/ printf("\n结果是=0%o\n", a&rs); /*进行与运算,得到后4位的数据*/ }
  • 3. 取出给定16位二进制数的奇数位取出给定的16位二进制数的奇数位,构成新的数据并输出。(范例位置:光盘\TM\fl\10\2) #include void main() { unsigned short a,s=0,q; int i,j,n=7,m; printf("请输入一个八进制数:\n"); scanf("%o", &a); /*输入一个八进制数*/ m=1<<15; /*m的最高位为1,其他位为0*/ a<<=1; /*左移一位,使第15位成为最高位*/ for(i=1;i<=8;i++) /*得到8位数*/ { q=1; if(m & a) /*如果本位上值为1则进行计算*/ { for(j=1;j<=n;j++) q*=2; /*得到权值*/ s+=q; /*累加*/ } a<<=2; /*向左移位*/ n--; } printf("结果是:%o\n", s); /*将结果输出*/ }0011001111100
  • 4. 输出各个位段的值本例要求定义一个包含3个位段的结构体,然后分别给3个位段赋值,最后以整型的格式将其输出。(范例位置:光盘\TM\fl\10\3) #include int main() { struct cb { unsigned i:1; unsigned j:3; unsigned k:4; }b,*pb; b.i=1; b.j=5; b.k=10; printf("%d,%d,%d\n", b.i,b.j,b.k); pb=&b; pb->i=0; pb->j&=3; pb->k|=1; printf("%d,%d,%d\n",pb->i,pb->j,pb->k); return 0; }
  • 5. 位段变量的内存分配本实例实现定义位段变量,分析其所占内存。(范例位置:光盘\TM\fl\10\4) #include void main() { struct sb1 { int i:8; int j:2; int k:6; }s1; struct sb2 { int a:5; int b; int c:2; int :6; }s2; printf("%d,%d\n",sizeof(struct sb1),sizeof(s2)); printf("%x,%x\n",&s1,&s2); printf("%d,%d,%d\n",sizeof(s2),sizeof(s2.a),sizeof(s2.b)); return 0; }
  • 6. 求一个数的补码在屏幕输入一个八进制数,求出其补码,并输出结果。(范例位置:光盘\TM\fl\10\5) #include void main() { unsigned short a,z; printf("请输入一个八进制数:\n"); scanf("%o", &a); /*输入一个八进制数*/ z=a & 0100000; /*0100000的二进制形式为最高位为1,其余为0*/ if(z==0100000) /*如果a小于0*/ z=~a+1; /*取反加1*/ else z=a; printf("结果是: %o\n", z); /*将结果输出*/ }
  • 7. 使二进制数特定位翻转 在屏幕上输入一个数,实现使其低4位翻转,即0变为1,1变为0。最终输出翻转后的结果。(范例位置:光盘\TM\fl\10\6) #include void main() { unsigned result; /*定义无符号数*/ int a, b; printf("请输入a:"); scanf("%d",&a); /*输入一个数*/ b=15; /*15的二进制形式为00001111,所以这里使用15*/ result = a^b; /*求a与b异或的结果*/ printf("\n结果是: %d\n", result); /*输出结果*/ }
  • 8. RSA加密 RSA加密算法是非对称加密的代表,RSA算法是第一个同时用于加密和数值前面的算法,易于理解和操作。本实例用于介绍RSA加密的方法,运行本实例编译后的可执行文件,指定p的值为5,q的值为11,e的值为3,选择1,指定m的值14。(范例位置:光盘\TM\fl\10\7) #include int candp(int a,int b,int c) { int r=1; b=b+1; while(b!=1) { r=r*a; r=r%c; b--; } printf("%d\n",r); return r; } void main() { int p,q,e,d,m,n,t,c,r; char s; printf("please input the p,q: "); scanf("%d%d",&p,&q); n=p*q; printf("the n is %3d\n",n); t=(p-1)*(q-1); printf("the t is %3d\n",t); printf("please input the e: "); scanf("%d",&e); if(e<1||e>t) { printf("e is error,please input again: "); scanf("%d",&e); } d=1; while(((e*d)%t)!=1) d++; printf("then caculate out that the d is %d\n",d); printf("the cipher please input 1\n"); printf("the plain please input 2\n"); scanf("%d",&r); switch(r) { case 1: printf("input the m: "); /*输入要加密的明文数字*/ scanf("%d",&m); c=candp(m,e,n); printf("the cipher is %d\n",c);break; case 2: printf("input the c: "); /*输入要解密的密文数字*/ scanf("%d",&c); m=candp(c,d,n); printf("the cipher is %d\n",m);break; } getch(); }
  • 9. Thank youwww.mingribook.com