It sounds like you're running into variable overflow. If you're using a signed char as a data type, you only have eight bits to work with, so your value can't exceed 127 or -128. As such, when you multiply 46 * 10, you get 460, which is too large, so it wraps around. Wikipedia explains it more fully than I can:
http://en.wikipedia.org/wiki/Integer_overflow