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文章来源:https://www.toymoban.com/news/detail-733953.html
因为正数和负数进行左移和按位与运算时的二进制是补码,所以负数和正数的代码统一。文章来源地址https://www.toymoban.com/news/detail-733953.html
到了这里,关于C语言【进制转换】35:输出二进制补码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!