|
|
| salve a tutti, volevo condividere con voi un programma che ho fatto in Python per HP Prime in grado di calcolare il complemento a due di un numero decimale. E' una prima versione e quindi un po' rozza ma funziona. Tramite il wrapper in PPL, la funzione tc2 viene esportata e richiamabile dalla home La chiamata ha la sintassi : tc2(Num1, Bits) dove Num1 è il numero intero in base 10 da convertire mentre Bits indica il numero di bit che si vuole utilizzare per la rappresentazione in 2C. Il programma controlla se il numero di bit inserito è sufficiente per rappresentare il numero. Questo è il codice CODICE #pragma integer from hpprime import eval as ppleval; from sys import argv
def tc(val, nbits): firstone=False valinf=-pow(2,(nbits-1)) valsup=pow(2,(nbits-1))-1 print('Rappresentazione con i bit inseriti: ['+str(valinf)+','+str(valsup)+']') if val >= valinf and val <= valsup: if nbits<10: strformat='{0:0'+str(nbits)+'b}' else: strformat='{0:'+str(nbits)+'b}' strformat=strformat.format(abs(val)) print(strformat) if val < 0: for element in range(len(strformat)-1,-1,-1): #print(str(element)+' '+strformat[element]) if firstone == False: if strformat[element] == '1': firstone=True else: if strformat[element] == '0': strformat=strformat[:element]+'1'+strformat[element+1:] else: strformat=strformat[:element]+'0'+strformat[element+1:] return(strformat) else: return('numero di bit insufficiente')
print(argv[0]) print(argv[1]) print(argv[2]) sign = int(argv[0]) inValue = int(argv[1]) inBits = int(argv[2])
if(sign == 1): print('Numero negativo') inValue = inValue * -1.0
print('Numero da convertire: '+str(inValue)) print('Bits che saranno utilizzati: '+str(inBits))
out = tc(int(inValue), inBits)
print(out)
#END
EXPORT tc2(number, bits) BEGIN IF (number < 0) THEN PYTHON(tc,'1',abs(number),bits); ELSE PYTHON(tc,'0',number,bits); END; RETURN EXPR(TERMINAL(1)); END;
|
| |