C0 取模/余以及 int2hex

CMU C0 命令式编程学习,函数 quot(整除)、rem(余数)和 int2hex(10 转 16)笔记。


quot 和 rem:

/**
 * quot, rem
 * 
 * @author YanWen
 * @modified 2018-05-14
 */

int quot(int x, int y);     // div
int rem(int x, int y);      // mod

int quot(int x, int y) 
//@requires y != 0;
//@ensures result * rem(x, y) == x;
{
  return x >= 0 && y > 0 ? x / y :
         x <  0 && y < 0 ? x / y : x / y - 1;
}

int rem(int x, int y)
//@requires y != 0;
//@ensures quot(x, y) * y + result == x;
{
  return x >= 0 && y > 0 ? x % y :
         x <  0 && y < 0 ? x % y : x % y + y;
}

int2hex:

/**
 * int2hex
 * 
 * @author YanWen
 * @modified 2018-05-14
 */

#use <conio>
#use <string>

char _2hex(int i)
{
  return char_chr( i <= 9 ? char_ord('0') + i : char_ord('A') - 10 + i );
}

string int2hex(int x) 
//@requires x <= 0xffff;
{
  char[] res = alloc_array(char, 7);
  res[0] = '0';
  res[1] = 'x';
  res[2] = _2hex( ((x & 0xf000) >> 12) );
  res[3] = _2hex( ((x & 0x0f00) >>  8) );
  res[4] = _2hex( ((x & 0x00f0) >>  4) );
  res[5] = _2hex( ((x & 0x000f) >>  0) );
  res[6] = '';
  return string_from_chararray(res);
}

注意 coin 解释器也可引入 C0 string lib:

coin -l conio -l string [...]

参考:

  1. http://c0.typesafety.net/doc/c0-libraries.pdf
  2. http://c0.typesafety.net/references.html
  3. https://stackoverflow.com/questions/4085612/converting-an-int-to-a-2-byte-hex-value-in-c

作者: V

Web Dev

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s