使用二进制和二进制补码将值从正数切换到负数

Switching a value from positive to negative using binary and twos complement

提问人:Squillbill 提问时间:11/16/2023 最后编辑:Squillbill 更新时间:11/17/2023 访问量:43

问:

因此,对于我的大学计算机课程(英国),我们被分配了一项家庭作业任务,将用户的输入更改为负等价物(1 到 -1、13 到 -13 等),但我不知道该怎么做。我有一些代码是从stackoverflow上的其他页面中拼凑起来的,但我输出的结果总是在前面包含一个0,这意味着该值不再是负数。我不确定如何更改它,因为当我更改底部的递归代码时,我收到以下错误:

File "<ipython-input-23-300b7347f10c>", line 22
    return(num % 2, end = '')
                    ^
SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?

我对编码很陌生,在高中时只专注于基础知识,所以我真的不知道如何解决这个问题。

(另外,我们被告知我们不能使用 python 的任何内置函数来转换二进制和拒绝)

#Outputting original binary
binary = str(input("Enter a binary number:")) #asks for the binary number
RevBinary =binary[::-1] #Reverses the number for multiplying
count = 0 #sets counter at 0
denary = 0 #sets the denary value at 0


for number in RevBinary:
  denary += 2**count*int(number) #does 2^count multiplied by whatever the number in RevBinary the for loop is currently at
  count+=1 #increases count for next number

print("The original denary number is: [", denary, "]")

#----THE PROBLEM AREA----
NewDenary = Denary + 1 

def DecimalToBinary(num):

  if num >= 1:
    DecimalToBinary(num // 2)
  print(num % 2, end = '') ####Can't edit this line else i get the error message stated above

DecimalToBinary(NewDenary)
python 二进制 补码

评论

0赞 Barmar 11/16/2023
你为什么要把你的评论放在反引号里?注释前面应加上 。#
0赞 Barmar 11/16/2023
错误消息中的行在您发布的代码中不存在。
0赞 Barmar 11/16/2023
return不是函数调用,则不会为返回的值命名。你为什么认为你需要回来?这仅用于打印,不需要从函数返回。end=''
0赞 Kelly Bundy 11/16/2023
您应该澄清什么是输入和输出,目前您通过将 13 显示为输入但要求“输入二进制数”来自相矛盾。
0赞 Squillbill 11/16/2023
@Kelly Bundy 它要求用户输入二进制数,但目前我使用 10(1010) 和 11(1011) 进行测试

答:

0赞 SmellyCat 11/16/2023 #1

在我看来,这句话只是一个错误的粘贴。如果你想通过递归来构建一个字符串,你只需要在字符串之间加一个加号。return

def decimal_to_binary(num:int):
    if num < 0:
        raise ValueError('negative numbers not supported')
    elif num > 1:
        return decimal_to_binary(num >> 1) + decimal_to_binary(num & 1)
    else:
        return '1' if (num & 1) else '0'

在一和零的字符串中翻转位听起来像是一个简单的列表理解和字符串连接,也许有一些填充。我不愿意发布听起来像是作业的完整解决方案。

评论

0赞 Squillbill 11/16/2023
这只是他们设置的一个有趣的家庭作业任务,他们说我们可以使用谷歌,因此为什么我在这里,所以无需担心这是一项作业。我尝试实现发布的代码,但它最终没有给出负数,但它绝对是我对代码的实现。我对 python 还是相当陌生的,所以不太明白为什么它不起作用