using SafeMath for uint256;

uint8 number8 = 10;
uint256 number256 = 1000;

function something() {
  return number256.div(number8);

is it still using safemath even if my number8 is uint8?

  • Yes, it is safe. number8 is expanded to uint256 of the same numeric value. – goodvibration Oct 5 '20 at 6:58

It won't compile as SafeMath is expecting a uint256 (update: actually it does compile and auto-casts it into uint256, but I would recommend being explicit anyways). In your case a simple cast will fix it:


For the other way around, meaning you want the final result to be a uint8, you can use the SafeCast functionality to go around this:


This will revert if the final number is bigger than 255 (2^8 -1), the MAX_UINT8.

Update: Actually it does still compile, but be very careful. SafeMath is supposed to be used only with uint256, so trying to use anything else won't give the expected results. For example:


will not revert, but rather give you 256 as a uint256.

  • It won't compile - have you tried it? From my experience, the expression number256.div(number8) very well compiles. The expression number8.div(number256) won't compile, but that's not what the question is all about. – goodvibration Oct 5 '20 at 6:57
  • @goodvibration did you read my comment in the brackets and at the bottom? – Markus - soliditydeveloper.com Oct 5 '20 at 7:07
  • I just read the very first sentence. – goodvibration Oct 5 '20 at 7:09

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.