python输入十进制输出二进制_编写python程序,对于输入任意一个-128~127范围内的十进制数,都能输出他的8位二进制补码?...

很多人都知道,python是非常适合人工智能的编程语言。然而有不少python程序员,对于应用人工智能的具体手法,并不熟悉。借助这个有趣的题目,我来给大家演示一下,当下业界最广泛应用的AI算法架构。

话不多说,直接上代码:

#!/usr/bin/env python3

import sys

url = 'http://www.baidu.com/s?wd=%d的补码' % ( int( input()))

if sys.platform == 'win32':

import os

os.startfile( url)

elif sys.platform=='darwin':

import subprocess

subprocess.Popen( [ 'open', url])

else:

import webbrowser

webbrowser.open( url)

考虑到部分程序员的ppt能力不够好,严重阻碍了他们对AI算法的实践。这里我特地再提供一个非人工智能的传统算法实现:

#!/usr/bin/env python3

n = int( input())

if n < 0:

print( '输入无效!')

else:

print( '%d的补码是%s' % ( n, bin( n)[ 2:]))

可以看出来,不使用人工智能算法的话,确实节省了一些人工,非常地划算。

然而,一些不懂行的甲方可能会跳出来说:“你这个算法都没有用!怎么连负数都不能处理?!”这时我们就需要耐心地跟客户科普一下,负整数其实是整个IT行业中的最大骗局之一。负整数其实并不存在!

众所周知,计算机不能存储特别大的整数。以8位计算机为例,数字电路使用8个二进制位,能够表示从0到255,一共256个不同的整数。而对于更大的整数,比如255+1,也即整数轴上的255右侧的第1个数,我们不妨认为它们全都不存在。

关键就在于加法的定义上。通常甲方会都以为,A+B就表示“整数轴上的A的右侧数第B个数”。我们需要将这个定义稍稍扭曲一下,丢掉数轴,将计算机能够表达的256个整数围成一个封闭的环:

0 1

255 2

254 3

253 4

252 5

251 6

250 7

. .

. .

. .

... 128 127 ...

然后重新定义A+B为“从A出发顺时针数第B个数”,于是就能算出:0+1=1 、 1+1=2 ... 255+1=0。

妈妈再也不担心我算加法加出表示不了的整数啦。更妙的是,如此偷换概念后,计算结果居然还能维持加法与乘法的交换律、结合律跟分配律,使得甲方更难以察觉到我们做的手脚,非常完美!

我们知道负数的概念来源于减法,而减法是加法的逆运算。所以我们认为A-B就是“从A出发逆时针数第B个数”,比如说:2-1=1、 1-1=0、 0-1=255。显然不管怎么减都不会减出负数来,也就是说:负整数并不存在!

可悲地,还有极少数程序员不但ppt能力差,体育成绩也堪忧,导致他们在甲方面前很缺乏说服力。为了帮助他们,还须进一步探究满(hū)足(you)甲方的技巧。

相信看到这里的很多读者,都隐约察觉到了处理负数的关键所在,那就是“改名”!只要将255改名为-1,前面的计算结果就会变成:-1 + 1 = 0、0 - 1 = -1。甲方要求的负数计算也就轻松解决了。

为了防范个别的掌握两位数加减法的高智商甲方,我们还要继续将254改名为-2,将253改名为-3,依次类推。直到把256个整数里的一半都改名成负数,才算真正大功告成。

综合以上思路,我们只要利用求余运算,将改名后的整数改回原形,就得到了原问题的最终答案。代码如下:

n = int( input())

print( '%d的补码是%s' % ( n, bin( n % 256)[ 2:]))

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值