关于C语言“位运算”的一点小问题

来源:百度知道 编辑:UC知道 时间:2024/06/04 00:00:56
有一道题,说是让设计一个函数,使给出一个数的原码,能得到该数的补码。
我尝试着设计一下:
main()
{unsigned int a,z;
printf("qingshuruyigebajinzhishu:");
scanf("%o",&a);
z=a&0100000;
if(z==0100000)
z=~a+1;
else
z=a;
printf("%odebumashi:%o\n",a,z);
}
可我怎么看怎么觉得不对……麻烦高手帮我看一下,有那些地方是错了的……如果错了请帮忙改正,谢了!

假设你机器上int是二字节

主要逻辑:
unsigned int t = a;//记录下原值
z = a & 0x8000;//0x8000即二进制10...0
if(z >> 15){
//负数
a = ~a;
a++;
}else{
//正数
}
printf(...,t,a);

都是定义的unsigned类型?