C语言【进制转换】35:输出二进制补码

35:输出二进制补码

总时间限制: 

1000ms

内存限制: 

65536kB

描述

输入一个整型(int)的整数,输出它的32位二进制补码。

输入

一个整型整数。

输出

输出一行,即该整数的补码表示。

样例输入

7

样例输出

00000000000000000000000000000111

代码实现:

#include<stdio.h>
int main()
{
    int num;
    scanf("%d",&num);
    int i;
    for(i=31;i>=0;i--)
    {
        if((num&(1<<i))!=0)
            printf("1");
        else
            printf("0");
    }
    return 0;
}

首先要明白 &(按位与)和 << (左移)的用法

&规则:

1&1=1

1&0=0

0&1=0

0&0=0

左移规则:

原始二进制:00001

左移1位后: 00010

左移2位后: 00100

以此类推,左移后右边末尾补0,左边溢出的二进制舍去,符号位按编译器有算术和逻辑两种情况变化,这里不详细讲解。

num=7

num的二进制是  :            00000000000000000000000000000111

数字1左移0位的二进制是:00000000000000000000000000000001

num&1后,只有最低位位置上为1时转化后为1

转化后二进制是 :              00000000000000000000000000000001

 

这个二进制代表的值不为0,打印1

然后1左移1位后:

num的二进制是  :           00000000000000000000000000000111

数字1左移1的二进制是:  00000000000000000000000000000010

转化后的二进制是:          00000000000000000000000000000010

 

值不为0,打印1

最终1左移31位后

num的二进制是  :           00000000000000000000000000000111

数字1左移31后二进制是:10000000000000000000000000000000

转化后的二进制是:          00000000000000000000000000000000

 

值为0,打印0

因为先打印的是二进制的最高位,所以要从左移31位开始到左移0位

可以看出,当补码上某位二进制是1时,才会打印1,否则打印0

最终打印出来的二进制为:00000000000000000000000000000111

因为正数和负数进行左移和按位与运算时的二进制是补码,所以负数和正数的代码统一。

  • 12
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值