signed nibble

Patrick Schluter Patrick.Schluter at bbox.fr
Mon Jan 7 20:06:17 UTC 2019


On Monday, 7 January 2019 at 18:56:17 UTC, H. S. Teoh wrote:
> On Mon, Jan 07, 2019 at 06:42:13PM +0000, Patrick Schluter via 
> Digitalmars-d-learn wrote:
>> On Monday, 7 January 2019 at 17:23:19 UTC, Michelle Long wrote:
>> > Is there any direct way to convert a signed nibble in to a 
>> > signed byte with the same absolute value? Obviously I can do 
>> > some bit comparisons but just curious if there is a very 
>> > quick way.
>> 
>> byte b = nibble | ((nibble & 0x40)?0xF0:0);
>
> This is equivalent to doing a bit comparison (implied by the ? 
> operator).  You can do it without a branch:
>
> 	cast(byte)(nibble << 4) >> 4
>
> will use the natural sign extension of a (signed) byte to 
> "stretch" the upper bit.  It just takes 2-3 CPU instructions.
>

Yeah, my bit-fiddle-fu goes back to pre-barrel-shifter days. Up 
to 32 bit processors, shifting was more expensive than branching.



More information about the Digitalmars-d-learn mailing list