热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

计蒜客T1182输出二进制补码(python3.6)

题目描述题目链接:https:nanti.jisuanke.comtT1182蒜头君有一个int的整数,输出它的32位二进制补码。输入格式一个整型整数。输出格式输出一行,即该整数的
题目描述

题目链接:https://nanti.jisuanke.com/t/T1182

蒜头君有一个 int 的整数,输出它的 32 位二进制补码。

输入格式
一个整型整数。

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

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

样例输入

7

样例输出

00000000000000000000000000000111
解题思路

首先弄清楚原码、反码、补码的概念:
以8位二进制码为例:
原码:
9的二进制:0000 1001
-9的二进制:1000 1001
反码:
正数反码即本身
负数反码将除了最高位的符号位不变以外,其余位数全部取反
+9 为 0000 1001
-9 为 1111 0110
补码:
正数的补码即本身
负数的补码在反码的基础上+1、
+9 为 0000 1001
-9 为 1111 0111

本题目有两个坑点:
1、对于python来讲,int型的负数采用bin函数以后,得出的并非真正的二进制负数,而是该负数对应正数的前面加了个负号,如下所示:

num1=9
num1_b=bin(num1)
num2=-9
num2_b=bin(num2)
print(num1_b)
print(num2_b)
#输出:
0b1001
-0b1001

2、虽然python自带取反码操作,但是并非我们想象中的直接按照位数取反
《计蒜客T1182 输出二进制补码(python3.6)》
如上图所示,3取反为-4,-4取反为3,python的取反操作实际是对原数+1再取相反数。原理如下:

1.对3取反:(取4位二进制)
①化为二进制:
3→0011
②对二进制结果取反:
0011→1100
③对结果先取反再加1:
1100→(~1100+1)→0011+1→0100
④对符号取反并化为十进制:
-0100→-4
2.对-4取反:
①化为二进制:
4→0100
②对二进制结果取反:
0100→1011
③对结果先加1再取反:
1011→~(1011+1)→ ~1100→0011
④对符号取反并化为十进制:
+0011→3

因此,对于本题目,要首先解决这两个大坑:
对于第一个大坑,直接采用分治法,分三种情况进行计算
对于第二个大坑,采用手动取反的方式,即list(map(lambda x: (int(x) + 1) % 2, b))
最后注意一下细节,比如32位要都有且符合格式,还有边界情况,就ok啦~

python代码

n=int(input())
if n >0:
b=bin(n)[2:]
list_b = [0] * (32 - len(b))
list_b=list_b+list(map(int,b))
str_b="".join('%d'%i for i in list_b)
print(str_b)
elif n<0:
b=bin(n)[3:]
list_b=[1]*(32-len(b))
list_b=list_b+list(map(lambda x: (int(x) + 1) % 2, b))
str_b = "".join('%d' % i for i in list_b)
int_b=int(str_b,base=2)+1
ans=bin(int_b)[2:]
print(ans)
else:
print("0"*32)

推荐阅读
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式
    大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式 ... [详细]
  • 双指针法在链表问题中应用广泛,能够高效解决多种经典问题,如合并两个有序链表、合并多个有序链表、查找倒数第k个节点等。本文将详细介绍这些应用场景及其解决方案。 ... [详细]
  • 利用python爬取豆瓣电影Top250的相关信息,包括电影详情链接,图片链接,影片中文名,影片外国名,评分,评价数,概况,导演,主演,年份,地区,类别这12项内容,然后将爬取的信息写入Exce ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • Visual Studio Code (VSCode) 是一款功能强大的源代码编辑器,支持多种编程语言,具备丰富的扩展生态。本文将详细介绍如何在 macOS 上安装、配置并使用 VSCode。 ... [详细]
  • 题目《BZOJ2654: Tree》的时间限制为30秒,内存限制为512MB。该问题通过结合二分查找和Kruskal算法,提供了一种高效的优化解决方案。具体而言,利用二分查找缩小解的范围,再通过Kruskal算法构建最小生成树,从而在复杂度上实现了显著的优化。此方法不仅提高了算法的效率,还确保了在大规模数据集上的稳定性能。 ... [详细]
  • 本项目通过Python编程实现了一个简单的汇率转换器v1.02。主要内容包括:1. Python的基本语法元素:(1)缩进:用于表示代码的层次结构,是Python中定义程序框架的唯一方式;(2)注释:提供开发者说明信息,不参与实际运行,通常每个代码块添加一个注释;(3)常量和变量:用于存储和操作数据,是程序执行过程中的重要组成部分。此外,项目还涉及了函数定义、用户输入处理和异常捕获等高级特性,以确保程序的健壮性和易用性。 ... [详细]
  • 本文全面解析了 Python 中字符串处理的常用操作与技巧。首先介绍了如何通过 `s.strip()`, `s.lstrip()` 和 `s.rstrip()` 方法去除字符串中的空格和特殊符号。接着,详细讲解了字符串复制的方法,包括使用 `sStr1 = sStr2` 进行简单的赋值复制。此外,还探讨了字符串连接、分割、替换等高级操作,并提供了丰富的示例代码,帮助读者深入理解和掌握这些实用技巧。 ... [详细]
  • 三角测量计算三维坐标的代码_双目三维重建——层次化重建思考
    双目三维重建——层次化重建思考FesianXu2020.7.22atANTFINANCIALintern前言本文是笔者阅读[1]第10章内容的笔记,本文从宏观的角度阐 ... [详细]
  • 过去查询Mysql的时候,都见3306对所有端口开放着,感觉不安全。netstat&nbsp;-anlp&nbsp;|&nbsp;grep&nbsp;mysqltcp&nbsp;0&am ... [详细]
  • 探讨如何在Go语言中高效地处理大规模切片的去重操作,特别是针对百万级数据量的场景。 ... [详细]
  • 在 LeetCode 的“有效回文串 II”问题中,给定一个非空字符串 `s`,允许删除最多一个字符。本篇深入解析了如何判断删除一个字符后,字符串是否能成为回文串,并提出了高效的优化算法。通过详细的分析和代码实现,本文提供了多种解决方案,帮助读者更好地理解和应用这一算法。 ... [详细]
  • 属性类 `Properties` 是 `Hashtable` 类的子类,用于存储键值对形式的数据。该类在 Java 中广泛应用于配置文件的读取与写入,支持字符串类型的键和值。通过 `Properties` 类,开发者可以方便地进行配置信息的管理,确保应用程序的灵活性和可维护性。此外,`Properties` 类还提供了加载和保存属性文件的方法,使其在实际开发中具有较高的实用价值。 ... [详细]
  • 本文探讨了在PHP中实现MySQL分页查询功能的优化方法与实际应用。通过详细分析分页查询的常见问题,提出了多种优化策略,包括使用索引、减少查询字段、合理设置缓存等。文章还提供了一个具体的示例,展示了如何通过优化模型加载和分页参数设置,显著提升查询性能和用户体验。 ... [详细]
author-avatar
手机用户2502935633
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有