Ich versuche, die Anzahl der 1 auf der linken Seite zu bekommen (Bits 16-31) Dieser Code scheint zu funktionieren, aber ich bekomme 1 extra Zählung auf meine 1 von sicher ganze Zahlen. Beispiel: 1536 binär ist 0000 0000 0000 0000 | 0000 0110 0000 0000 und ich bekomme 0 1 auf der linken Seite, die korrekt ist.Zählen der 1en auf der linken Seite einer binären Darstellung
Auch: 100000 linke Seite binäre ist 0000 0000 0000 0001 und mein Ergebnis ist 1. das ist auch richtig.
Jedoch: 1000000000 binär ist 0011 1011 1001 1010 | 1100 1010 0000 0000 und ich bekomme 10 1 auf der linken Seite anstelle von 9.
Ich habe andere Zahlen getestet, aber sie haben auch eine extra Zählung.
#Displays number of 1's on left half
li $v0, 4
la $a0, left
syscall
li $t2, 0 #i = 0
srl $t3, $s0, 16 #shifts users number to the right by 16 bits
Counter:
and $t4, $t3, 1 #Mask off bit
beq $t4, 1, Count #if mask = 1 go to count
srl $t3, $t3, 1 #if mask != 1 (aka 0) shifts right by 1
beq $t3, 0, Exit #once the shifted bits = 0 go to exit
Count:
add $t2, $t2, 1 #increment i++
srl $t3, $t3, 1 #shifts right by 1
j Counter
Exit:
li $v0, 1 #Displays number of 1's
move $a0, $t2
syscall
Nicht sicher, ob der Code sogar richtig ist, seit neu zu Mips. Könnte möglich sein, dass das Ganze falsch ist.