Warning: this is an htmlized version!
The original is across this link,
and the conversion rules are here.
/* (find-es "lua5" "lbitlib")
 * Written by Reuben Thomas for Lua4.0
 * patched by Edrx for Lua5.0
 */

#include "lauxlib.h"
#include "lua.h"

typedef long long Integer;
typedef unsigned long long UInteger;

#define luaL_checkbit(L,n) ((Integer)luaL_checknumber(L, n))
#define luaL_checkubit(L,n) ((UInteger)luaL_checkbit(L, n))

#define TDYADIC(name, op, t1, t2) \
  static int name(lua_State* L) { \
    lua_pushnumber(L, \
      luaL_check ## t1 ## bit(L, 1) op luaL_check ## t2 ## bit(L, 2)); \
    return 1; \
  }

#define DYADIC(name, op)  TDYADIC(name, op, , )

#define MONADIC(name, op) \
  static int name(lua_State* L) { \
    lua_pushnumber(L, op luaL_checkbit(L, 1)); \
    return 1; \
  }

MONADIC(int_not,      ~)
DYADIC(int_mod,       %)
DYADIC(int_and,       &)
DYADIC(int_or,        |)
DYADIC(int_xor,       ^)
TDYADIC(int_lshift,  <<, , u)
TDYADIC(int_rshift,  >>, u, u)
TDYADIC(int_arshift, >>, , u)

static const struct luaL_reg bitlib[] = {
{"bnot",    int_not},
{"imod",    int_mod},  /* "mod" already in Lua math library */
{"band",    int_and},
{"bor",     int_or},
{"bxor",    int_xor},
{"lshift",  int_lshift},
{"rshift",  int_rshift},
{"arshift", int_arshift},
{NULL,      NULL}
};

LUALIB_API int lua_bitlibopen (lua_State *L) {
    lua_pushvalue(L, LUA_GLOBALSINDEX);
    luaL_openlib(L, NULL, bitlib, 0);
    return 0;
}