[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: PATCH: hex numbers and bit ops
- From: Philippe Lhoste <PhiLho@...>
- Date: Mon, 05 Sep 2005 15:42:08 +0200
Mike Pall wrote:
this is a patch relative to Lua 5.1 alpha:
- The lexer now parses hex numbers (e.g. 0x1234 == 4660).
- luaO_str2d has a fallback for non C99 compliant systems
(used by tonumber() and by the lexer).
- String literals allow hex escape sequences (e.g. "\x40" == "@").
- New bit operations:
y = math.bitor(x1, x2)
y = math.bitand(x1 [, x2]) x2 = -1 if omitted (i.e. tobit)
y = math.bitxor(x1 [, x2]) x2 = -1 if omitted (i.e. bitnot)
Why not a variable number of arguments?
y = math.bitor(0x12, 0x34, 0x56)
looks nicer than
y = math.bitor(0x12, math.bitor(0x34, 0x56))
Isn't it?
Mmm, these names sound funny in French...
y... = math.bitfield(x, start [, len] ...)
'start' is the bit position relative to the lsb (bit 0)
It's a right/left shift for a positive/negative 'start'.
It's a pure shift if 'len' is omitted.
Otherwise the result is masked to 'len' valid bits.
Not very user friendly, it is quite hard to figure what the examples do...
Why not make specific functions for shifting bits?
Examples:
bitfield(0x345678, 8) --> 0x3456
bitfield(0x345678, -8) --> 0x34567800
bitfield(0x345678, 8, 8) --> 0x56
bitfield(0x345678, -8, 8) --> 0x7800
bitfield(0x345678, 3, 10) --> 0x2cf
bitfield(0x345678, 0,8, 8,8, 16,8) --> 0x78 0x56 0x34
--
Philippe Lhoste
-- (near) Paris -- France
-- http://Phi.Lho.free.fr
-- -- -- -- -- -- -- -- -- -- -- -- -- --