Ich programmiere ein C++ - Programm, um eine 16-Bit-virtuelle Maschine zu simulieren. Ich habe eine Funktion 'addc', in der ich auf Überlauf prüfen muss. Ich bin ein wenig unter den Bedingungen für Überlauf verloren. Ich weiß, dass Überlauf passiert, wenn Sie 2 positive Zahlen hinzufügen und Sie eine negative Zahl erhalten, oder wenn Sie 2 negative Zahlen hinzufügen, und Sie eine positive Zahl erhalten. In meiner Funktion addc habe ich jedoch drei Zahlen, die ich hinzufügen muss. Komme ich mir das richtig?Überprüfung des Überlaufs für die addc-Funktion
Meine Funktion soll dies tun:
Register destination = registrieren Ziel + Quellbit
(rd = rd + rs + c)
Bisher für Überlauf überprüft, registrieren + tragen Ich habe diesen Code ..
//Check when adding positive numbers gives negative result
//My carry bit is always positive (either 0 or 1)
if(rd >= 0 and rs >= 0 and c >= 0) and ((rd + rs + c) < 0)){
//set overflow bit
}
else if(rd < 0 and rs < 0 and c < 0) and (rd + rs + c) > 0)){
//set overflow bit
}
Meine Verwirrung ist für die sonst wenn Bedingung. C wird immer 0 oder 1 sein, also wird es nie in die else if-Schleife gehen, also gibt es fast keinen Grund, die else if-Schleife zu haben. Mache ich das richtig? Oder müsste ich das Übertragsbit (c) zu einem der Operanden (entweder rd oder rs) hinzufügen, so dass ich nur zwei Operanden zum Vergleichen habe. So was?
else if(rd < 0 and ((rs + c) < 0)) and (rd + (rs + c)) > 0)){
//set overflow bit
}