|
![]() | 作者: sniper167 [sniper167]
![]() |
登录 |
写一个函数,对一个16位的二进制数取出他的奇数位(即从左边起第1,3,5・・・,15位)。 main() {unsigned getbits(unsigned); unsigned int a; printf ("\ninput an octal number:"); scanf ("%o",&a); printf ("result:%o\n",getbits(a)); } unsigned getbits(unsigned nalue) {int i,j,m,n; unsigned int z,a,q; z=0; for (i=1;i<=15;i+=2) {q=1; for (j=1;j<=(16-i-1);j++) q=q*2; a=value>>(16-i); a=a<<15; a=a>>15; z=z+a*q; } return(z); } 这个函数我看不懂,哪位帮忙加几条注释,谢谢! 这个函数是我自己写的,是将一个数与1010101010101010相与,就可以保留奇数位,偶数位全为0,可是怎样才能将奇数位提出来构成一个新的数呢?谢谢 unsigned getbits(unsigned value) {int i; unsigned int a; for (i=0;i<8;i++) {a=0+2; a=a<<2; } value=value&a; return(value); } |
地主 发表时间: 04-02-24 12:41 |
![]() | 回复: 286 [unique] ![]() |
登录 |
main() { unsigned getbits(unsigned); //函数声明,该名应该最到程序最头,放此处不合适。 unsigned int a; printf ("\ninput an octal number:"); scanf ("%o",&a); //请输入一个八进制数。 printf ("result:%o\n",getbits(a)); //打印。 } unsigned getbits(unsigned nalue) { int i,j,m,n; unsigned int z,a,q; z=0; for (i=1;i<=15;i+=2) //i表示奇数位。 { q=1; for (j=1;j<=(16-i-1);j++) q=q*2; //q表示要该奇数位为1,其它为0的数 a=value>>(16-i); a=a<<15; a=a>>15; //a左移右移无非是想去掉某位周围的1 z=z+a*q; //z加上二者乘积,不明白了。 } return(z); //没看懂这么烂的程序。 } |
B1层 发表时间: 04-02-24 12:54 |
![]() | 回复: sniper167 [sniper167] ![]() |
登录 |
多谢286了 其实不用那摸麻烦,只要写一下函数getbits的注释就行 这个程序是我在<<C程序习题答案>>(就是潭浩强那本书上习题的答案)上看见的 看不懂 那286有没有更好的? |
B2层 发表时间: 04-02-24 13:00 |
![]() | 回复: 286 [unique] ![]() |
登录 |
将一个数的奇数位形成一个新数。 unsigned unionodd(unsigned oldvalue) { int i; unsigned newvalue=0; oldvalue>>1; //如果是取偶数位,则去掉该行。 for (i=0;i<32;i+=2) //如果你使用的是TC2.0,将32改成16。 { if (oldvalue & 1==1) //最低位为1 newvalue+=1<<i/2; oldvalue>>2; } return newvalue; } [此贴被 286(unique) 在 02月25日10时56分 编辑过] |
B3层 发表时间: 04-02-24 13:12 |
![]() | 回复: sniper167 [sniper167] ![]() |
登录 |
感谢 286![]() ![]() ![]() ![]() |
B4层 发表时间: 04-02-24 13:19 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号