ASCII text offset for zero: '0'

I am having a hard time understanding why in a lot of code it will have things such as
x = Serial.read() - '0';

What is the purpose of the -'0' part of that line of code?
What does ASCII text offset for zero mean?

Thanks for any help!

Serial.read() returns a value in decimal and character '0' has a value in decimal of 48, so that's a way of read the return value in a human readable way.
Let's say you send a value to arduino like 8 , without that "Serial.read() - '0';" the X variable will have a value of 56 in decimal.
If you put that "Serial.read() - '0';" then you will have 8 which is human readable
.The math is 56-48 = 8

So is everything converted to ASCII? Do I always need to account for this conversion from 8 that I input to 56 which is ASCII for 8? I guess what I am asking is, will the output always be in ASCII? Sorry just a bit confusing.

So is everything converted to ASCII?

No your keyboard sends the ascii code for the char 0. Written as '0'. You need to convert the char to a number.

The ASCII codes are arranged so that '1' has a vode which is 1 more than the code for '0' and the code for '2' is 2 more etc.

By the way functions do not return decimal values or hex ones , they return values. Representing values as hex or decimal is done to make then more readable to humans.

Mark