输出二进制补码问题

这道题看百度上的题解把我看蒙了,想了半天没想通,直到我看见在计算机中负数是用补码来表示的,我才恍然大悟,咋把这个给忘了(抓狂)

题目

蒜头君有一个 int\text{int}int 的整数,输出它的 323232 位二进制补码。

输入格式

一个整型整数。

输出格式

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

输出时每行末尾的多余空格,不影响答案正确性

样例输入:

7

样例输出

00000000000000000000000000000111

分析:

做这道题就是明白一点:计算机中负数用补码来表示,因为整数补码是本身,所以这道题其实就是输出一个数在计算机中的二进制形式,超级简单了

code

#include<iostream>
#include<stdio.h>
using namespace std;
int map1[110][110],map2[110][110];
int main()
{
  int n;
  cin>>n;
  for(int i=31;i>=0;i--){
    cout<<((n>>i)&1); //输出这一位的数
  }
}

补充

传送门

%i的作用

%i和%d区别在scanf中,%i功能更强大,能根据输入的形式转换成十进制并赋值给变量,比如下面程序:

int n;
  scanf("%i",&n);
  cout<<n;
}

输入0X10,输出16,输入0010输出8(八进制)

c语言不能直接表示二进制,没有数字前缀表示

itoa函数

传送门

C语言中可以用%o %d/%i %x输出8 10 16进制的数但是没有二进制的输出字符,但是有itoa的函数,

注意: 计算机中负数用补码表示,所以itoa函数求出的负数也是补码形式

函数原型:

char *itoa( int value, char *string,int radix); [1] 
原型说明:
value:欲转换的数据。
string:目标字符串的地址。
radix:转换后的进制数,可以是10进制、16进制等。

参考代码:

1

#include <stdlib.h>
#include <stdio.h>
int main(void)
{
    int number = 12345;
    char string[32];
    itoa(number, string, 10);
    printf("integer = %d string = %s\n", number, string);
    return 0;
}

2

/* itoa example */
#include <stdio.h>
#include <stdlib.h>
int main (){
    int i;
    char buffer[33];
    printf ("Enter a number: ");
    scanf ("%d",&i);    //输入整数i
    itoa (i,buffer,10);    //将i转化为10进制数,存到buffer中
    printf ("decimal: %s\n",buffer);    //输出打印buffer
    itoa (i,buffer,16);    //将i转化为16进制数,存到buffer中
    printf ("hexadecimal: %s\n",buffer);    //输出打印buffer
    itoa (i,buffer,2);    //将i转化为2进制数,存到buffer中
    printf ("binary: %s\n",buffer);    //输出打印buffer
    return 0;}
OUTPUT:
Enter a number: 1750
decimal: 1750
hexadecimal: 6d6
binary: 11011010110

注意事项

itoa() 函数有3个参数:第一个参数是要转换的数字,第二个参数是要写入转换结果的目标字符串,第三个参数是转移数字时所用的基数(进制)。在上例中,转换基数为10,就意味着以10为转换进制。10:十进制;2:二进制…

itoa 并不是一个标准的C函数,它是Windows特有的,如果要写跨平台的程序,请用sprintf。

标准库中有sprintf,功能比这个更强,用法跟printf类似:

char str[255];

sprintf(str, “%x”, 100); //将100转为16进制表示的字符串。

下列函数也可以将相应类型的整数转换为字符串:

  将无符号整型数value转换成字符串并返回该字符串,radix为转换时所用基数
  char *ltoa(long value,char *string,int radix)
  将长整型数value转换成字符串并返回该字符串,radix为转换时所用基数
  char *itoa(int value,char *string,int radix)
  将整数value转换成字串存入string,radix为转换所用基数.
  double atof(char *nptr)
  将字符串nptr转换成双精度数,并返回这个数,错误返回0
  int atoi(char *nptr)
  将字符串nptr转换成整型数, 并返回这个数,错误返回0
  long atol(char *nptr)
  将字符串nptr转换成长整型数,并返回这个数,错误返回0
  double strtod(char *str,char **endptr)
  将字符串str转换成双精度数,并返回这个数,
  long strtol(char *str,char **endptr,int base)
  将字符串str转换成长整型数, 并返回这个数

ok,又11点多了,哎!啥也不是

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我的Doraemon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值