Clear Filters
Clear Filters

How do you subtract/add with roll under/over

3 views (last 30 days)
When you subtract two uint numbers together example:
uint8(1) - uint8(2)
I would like the answer to be 255, instead no matter what the value MATLAB returns 0, likewise if you try adding:
uint8(255) + uint8(1)
MATLAB returns 255.
I have written my own add and subtract functions for this purpose which work fine but I am wondering whether there is actually something in built that I am missing. If there is could you please point me in the right direction.
Thanks.
  1 Comment
Matthew Doveton
Matthew Doveton on 19 Aug 2013
The way I posted my question appears to have caused some confusion. I do not have a problem implementing the desired effect myself but would like to know if this is an option within MATLAB that I'm unaware of (fairly new to MATLAB)
for uint8(1) - uint8(2) = 255, is what I want.
I basically want it to mimic my microcontroller code. If I were to write:
a = 1 - 2;
a would == 255, if a was a byte. In MATLAB a == 0;
As stated above, I have written a function to replicate this behaviour but thought that MATLAB would have this as an option. I personally would like MATLAB to mimic what would happen within a microcontroller as I use MATLAB primarily to test code that I then would convert to C for use within a microcontroller. I had some code that had an issue with rolling under at a certain condition. I could not replicate this in MATLAB due to this issue.

Sign in to comment.

Answers (2)

Azzi Abdelmalek
Azzi Abdelmalek on 19 Aug 2013
Edited: Azzi Abdelmalek on 19 Aug 2013
Edit
a=uint8(-1);
out=uint8(255)*uint8(not(a))+a
  2 Comments
Matthew Doveton
Matthew Doveton on 19 Aug 2013
for uint8(1) - uint8(2) = 255, is what I want.
I basically want it to mimic my microcontroller code. If I were to write:
a = 1 - 2;
a would == 255, if a was a byte. In MATLAB a == 0;
As stated above, I have written a function to replicate this behaviour but thought that MATLAB would have this as an option. I personally would like MATLAB to mimic what would happen within a microcontroller as I use MATLAB primarily to test code that I then would convert to C for use within a microcontroller. I had some code that had an issue with rolling under at a certain condition. I could not replicate this in MATLAB due to this issue.

Sign in to comment.


Sean de Wolski
Sean de Wolski on 19 Aug 2013
Edited: Sean de Wolski on 19 Aug 2013
x = uint8(1);
y = uint8(2);
z = max(double(x)-double(y),0)+uint8(x < y).*255

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!