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;
}