计算二进制补码 计蒜客 Python
题目
题目来源于计蒜客输出二进制补码
题目描述
蒜头君有一个 int
的整数,输出它的 32
位二进制补码。
输入格式
一个整型整数。
输出格式
输出一行,即该整数的补码表示。
样例输入
7
样例输出
00000000000000000000000000000111
解题
思路分析
要想解这道题,首先要明白三个概念 原码、反码、补码
- 原码: 原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:
[+1]原=00000001[+1]_原 = 0000 0001[+1]原=00000001
[−1]原=10000001[-1]_原 = 1000 0001[−1]原=10000001
- 反码: 正数的反码是其本身;负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。
[+1]=[00000001]原=[00000001]反[+1] = [00000001]_原 = [00000001]_反[+1]=[00000001]原=[00000001]反
[−1]=[10000001]原=[11111110]反[-1] = [10000001]_原 = [11111110]_反[−1]=[10000001]原=[11111110]反
- 补码: 正数的补码是其本身;负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后 +1+1+1 。 (即在反码的基础上 +1+1+1 )
[+1]=[00000001]原=[00000001]反=[00000001]补[+1] = [00000001]_原 = [00000001]_反 = [00000001]_补[+1]=[00000001]原=[00000001]反=[00000001]补
[−1]=[10000001]原=[11111110]反=[11111111]补[-1] = [10000001]_原 = [11111110]_反 = [11111111]_补[−1]=[10000001]原=[11111110]反=[11111111]补
了解了这三个概念之后,就容易分析做题了:
- 求补码需要分两个情况
- 正数:正数相对比较简单,因为正数的补码就是他二进制本身,前边补够相应的0就行了;
- 负数相对复杂:因为负数需要求反码,在其反码的基础上+1。
- 着重说一下负数
- 因为负数的反码第一位是 111 ,其余补 000 ,再求补码, 111 不变,其余 111 变 000 ,000 变 111 ;在这个基础上,可以把负数的第一位也补成 000 ,这样直接求反,就可以忽略符号位的判断
- 求得反码后,在反码的基础上 +1+1+1 即是补码。这里提供两种方法
ans = bin(int(''.join(fm), 2) + 1) # 转换为10进制+1,再转换回2进制
# 补码的另一种求法:# 求反后末尾所有1变0,遇到的第一个0变1,结束(等同于求反+1,手动进位)
fm = fm[::-1]
for i in range(32):if fm[i] == '1':fm[i] = "0"else:fm[i] = "1"break
fm = fm[::-1]
完整代码
n = bin(int(input()))
if n[0] != '-': # 正数print((32 - len(n[2:])) * '0' + n[2:]) # bin()返回的结果为0bxxx,所以要去除0b
else: # 负数fm = list((32 - len(n[3:])) * '0' + n[3:]) # 负数前边有符号,所以字符串截取应多一位s = (''.join(fm)).replace('0', '2').replace('1', '0').replace('2', '1') # 1变0,0变1,2是中间变量ans = bin(int(s, 2) + 1)print(ans[2:])
计算二进制补码 计蒜客 Python相关推荐
- 计蒜客python答案Top50
新手小白入门刷题学习,前50道题目,巩固基础,有些题目的解答并不是最简单而又高效,纯属暴力破解,希望各位大佬多多指教! 计蒜客官网: https://www.jisuanke.com T1001 计算 ...
- 计蒜客python刷题笔记
1.计算A+B A,B= map(int, input().split()) C=int(A+B) print(C) 这里面输入必须同时输入两个数.用空格隔开,所以用到了map函数,第一个参数控制格式 ...
- 计蒜客 Python练习
本文为了记录 学习Python3 所写 写的都是 语法训练题 记录自己学习的过程 题目是让你求一个斐波那契数列的第n项 然后我用了一个函数来计算这个东西 1:没有分号 2:各种段开头需要冒号 3 ...
- 最好的草 计蒜客 Python
题目 题目描述 奶牛 BessieBessieBessie 计划好好享受柔软的春季新草.新草分布在 RRR 行 CCC 列的牧场里.它想计算一下牧场中的草丛数量. 在牧场地图中,每个草丛要么是单个#, ...
- 区间内的真素数 计蒜客 Python
题目 题目描述 蒜头君请你帮忙找出正整数 MMM 和 NNN 之间(NNN 不小于 MMM)的所有真素数. 真素数的定义:如果一个正整数 PPP 为素数,且其反序也为素数,那么 PPP 就为真素数. ...
- h0152. 故事计算题(计蒜客——西邮K题)解析
小米给小宝讲了一个小故事.从前有座山,山上有N个庙,每个庙里有1个老和尚和N+1个小和尚.山中流传着一个故事:从前有座山,山上有N+1个庙,每个庙里有1个老和尚和N+2个小和尚.山中流传着一个故事:从 ...
- 在线计算机 授课,在线计算机教育网站计蒜客改版 推出算法竞赛课程
[赛迪网讯]4月16日消息,近日,新型在线计算教育平台计蒜客进行了重大改版,网站从底层架构到课程内容都进行了大幅调整.计蒜客新版除了服务速度和稳定性大幅提升外,还对用户的学习体验进行了优化:同时,计蒜 ...
- 计蒜客 - T1029 计算2的幂
计蒜客 - T1029 计算2的幂 题目 蒜术师为你准备了一道最简单的与幂运算的题目: 给定非负整数 n,求 2的n次方. 输入格式 一个整数 0≤n<31. 输出格式 一个整数,即 2的n次方 ...
- 计蒜客难题题库之一 泥塑课 python解答
计蒜客挑战难题之一 泥塑课 python解答 题目: 小米是一个幼儿园老师,每学期的泥塑课上,她都会给每个学生发不超过250立方厘米的等量橡皮泥,教大家做泥塑.在上课过程中,她发现每个班都恰好有一个小 ...
最新文章
- 看懂了这套书,你就看懂了程序的灵魂。
- 如果MySQL的自增 ID 用完了,怎么办?
- Python 途虎养车全系车型轮毂--参数分析与实现
- C++实现glut绘制点、直线、多边形、圆
- redis之(十一)redis实现缓存的功能
- [转]总结:Apache/Tomcat/JBOSS/Jetty/Nginx区别 .
- 知识管理在客户关系管理中的应用领域
- 自学it18大数据笔记-第二阶段hadoop-day11——会持续更新……
- STM32 USB数据接收与数据发送程序流程分析
- Mac 查找本机的ip
- CA证书服务器(6) 利用CA证书配置安全Web站点
- TensorFlow进阶:CNN对CIFAR10图像分类
- 码龄10年工作6年的搬砖小哥,最常访问的学习网站都在这里了
- 面对众多客户/用户需求,每个都紧急,怎么排期?
- c++ PDFium pdf转为图片(实例)
- 介绍identity matrices
- 2018-8-29-win2d-渐变颜色
- 第一章 计算机基础知识【信息学奥赛】
- Python - Requests库下载图片
- 统一了Excel和Python的神级编辑器GridStudio,安装起来确实不简单
热门文章
- 通过dsp设备实现录音与放音编程实例
- mysql表锁机制详解
- uni-app引入阿里巴巴矢量库(iconfont)图标
- 计算机组成原理---高速缓冲存储器
- Excel-VBA基础语法(VBA简介、数据类型、变量、数组、运算符、内置函数、过程与函数)
- @Excel导出实现动态控制导出列
- Spring Cloud Alibaba实现服务的无损下线功能
- python控制大疆无人机_如何从djitello无人机和python中的UDP服务器收集视频数据?...
- python运行pyc文件_Python pyc文件
- 学生成绩管理系统C语言课程设计