求一个数的补码 描述:输入一个八进制数,然后输出它的补码

110 阅读1分钟

1 题目

功能:求一个数的补码 描述:输入一个八进制数,然后输出它的补码

2 思路

一个正数的补码等于该数原码,一个负数的补码等于该数的反码加 1。 本例的关键是如何判断一个数是正数还是负数。当最高位为 1 时,则该数是负数;当最高位为 0 时,则该数是正数。 因此,数据 a 和八进制数据 010000 进行与运算,保留最高位得到数据的正负

3 代码

#include <stdio.h> 
#include <stdlib.h>/**
功能:求一个数的补码
描述:输入一个八进制数,然后输出它的补码
**/int main(int argc, char const *argv[]) {
​
    unsigned short  a,z;  
  printf("请输入一个八进制数:\n");
    scanf("%ho", &a);             // 输入一个八进制数
  z=a & 0100000;                  // 0100000的二进制形式为最高位为1,其余为0
  if(z==0100000)                  // 如果a小于0
    z=~a+1;                       // 取反加1
  else
    z=a;  
    printf("结果是: %o\n", z);     // 将结果输出
}

示例结果:

$ gcc ex083.c -o demo
$ ./demo
​
请输入一个八进制数:
115333
结果是: 62445