How does the cpu work out greater than (>) in unsigned ints?

  • Thread starter Thread starter Superposed_Cat
  • Start date Start date
  • Tags Tags
    cpu Work
Join the discussion
Registration is free. Ask a follow-up in this thread, or start your own.
4 replies · 1K views
Superposed_Cat
Messages
388
Reaction score
5
Hey all, I understand how the cpu does most things but I can't figure out how it would work out greater than or less than in unsigned integers, in signed you could simply subtract them and check the highest bit for sign (I assume) but unsigned ints will loop back to the greatest value if A-B where B>A, any help apreciated.
 
Engineering news on Phys.org
Superposed_Cat said:
Hey all, I understand how the cpu does most things but I can't figure out how it would work out greater than or less than in unsigned integers, in signed you could simply subtract them and check the highest bit for sign (I assume) but unsigned ints will loop back to the greatest value if A-B where B>A, any help apreciated.

You just do the subtraction with one extra zero bit on the left side of the operands. If you're comparing 64 bit integers, the operation is done in a 65-bit register. (In practice, the CPU designer doesn't mess with constructing actual 65-bit registers and data paths, we just do the subtraction in 64 bits and check for a carry out of the leftmost bit).
 
Last edited:
  • Like
Likes   Reactions: Superposed_Cat
Thank you so much! Can't believe I didn't think of that *facepalm*
 
To Expand a bit on what Nuqatory said its all in the operation of the ALU
When the ALU performs an operation, in this case a subtraction, a number of bits may get set in the Program Status Word.
For example
N: Result was negative
Z: Result was Zero
C: Result had a carry out

So if you did a piece of code
Code:
if(a>b) then
   do something
else
  do something else

the CPU would undertake the following actions
Code:
Load a into Register1
Load b into Register2 
Register1-Register2 
Branch If N bit set to LABEL1
Do something 
Branch to LABEL 2
LABEL1: 
Do something else
LABEL 2:

hope that makes sense :)
 
  • Like
Likes   Reactions: Superposed_Cat
cpscdave said:
the CPU would undertake the following actions
Code:
Load a into Register1
Load b into Register2
Register1-Register2
Branch If N bit set to LABEL1
Do something
Branch to LABEL 2
LABEL1:
Do something else
LABEL 2:

hope that makes sense :)

Of course the carry bit and not the N bit would be used for an unsigned comparision