Help Calculator

Intero a Binario complemento a 2, Programma HP Prime in Python

« Older   Newer »
  Share  
view post Posted on 16/12/2023, 19:10
Avatar

Junior Member

Group:
Member
Posts:
13

Status:


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;
 
Top
view post Posted on 16/12/2023, 19:26
Avatar

granatiere granitico

Group:
Member
Posts:
23,096
Location:
La prima capitale d'Italia

Status:


:rolleyes:
 
Top
view post Posted on 20/12/2023, 09:09

Member

Group:
Member
Posts:
761

Status:


Bravo, grazie :b:
 
Top
2 replies since 16/12/2023, 19:10   30 views
  Share