ARM > Introduction to ARM > Task One - Answers

by David Thomas on

Task One - Answers

The routine turns an ASCII character lower-case. In C it would be written like this:

int mystery(int c)
{
  unsigned int t;

t = c - 'A'; if (t <= 'Z' - 'A') c += 'a' - 'A';

return c; }

The tricky thing here is the coercion to unsigned int which allows us to replace two comparisons with a single one. This trick, the unsigned range optimisation, is discussed in the Efficient C for ARM course.

We can write it in a more expected way like this:

int mystery2(int c)
{
  if (c >= 'A' && c <= 'Z')
     c += 'a' - 'A';

return c; }