Hi,
I'm trying to get this binary converter working, but I can't seem to get the
negatives to work properly. If the integer is too low, the 0's that are
added for the amount of bits gets out of whack. I've tried to solve the
problem by adding another 'count' meter by which I can then tell if there
are too many 0's, but it hasn't worked at all.
CODE:
def conversion(n):
    b = ''
    while n > 0:
        r = n%2
        n = n/2
        r = str(r)      
        b = r+b         
    return b    

def positive(n,bits,count):
    append_zeros = bits - count
    if append_zeros > 0:
        return "0" + (append_zeros-1)*"0" + conversion(n)

def negative(n,bits,count,new_count):
    n = abs(n)
    append_zeros = bits - count
    while new_count > bits and new_count < bits-count:
        append_zeros = append_zeros - 2
        continue
    if append_zeros > 0:
        return "1" + (append_zeros-6)*"0" + conversion(n)

def signed_mag():
    print ""
    print "--------------------"
    print "Signed Binary"
    print "--------------------"
    print ""
    n = int(raw_input("Please enter a signed integer: "))
    bits = int(raw_input("Please enter the number of bits: "))
    count = conversion(n).count("0") + conversion(n).count("1")
    new_count = 0
    new_count = negative(n,bits,count,new_count).count("0") \
                + negative(n,bits,count,new_count).count("1")
    if bits - 1 < count:
        print "Out of range."
    else:
        if n < 0:
            print n,"is encoded as", negative(n,bits,count,new_count), \
                  "in Signed Binary."           
        elif n > 0:
            print n,"is encoded as", positive(n,bits,count), \
                  "in Signed Binary."
        else:
            print "That is not an valid signed interger."

Any help will be greatly appreciated. Thanks in advance.

Cheers,
Devon
_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to