C中,给函数原码求该数补码的程序,一些看不懂,请进:

来源:百度知道 编辑:UC知道 时间:2024/05/14 10:45:45
#include <stdio.h>
unsigned short getbits(unsigned short value);
main()
{unsigned short int a;
printf("input an octal number:");
scanf("%o",&a);
printf("result:%o\n",getbits(a));
getch();
return 0;
}
unsigned short getbits(unsigned short value)
{unsigned short z;
z=value&0100000;/*这个与是什么意思,是怎样判断负数的?*/
if(z==0100000)/*这个等于又是意思,等于它就是负数吗?*/
z=~value+1;
else z=value;
return z;
}
谢谢你,但我还是看不懂,0100000是个八进制数,value16位,和它相与怎样得到value的第十五位的?

上面z=value&0100000语句是取value符号位的意思,0100000是个八进制数。这个程序中的value是short型的整数,共16位:15-0,它和0100000位与后刚好取到value的第十五位。如value的第十五位是1的话,得到的z就是0100000,说明value是个负数。否则相反。