🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #12364

Re: andere C vraag

#12364
From: Roel Schroeven
Date: Sun, 18 Nov 2001 01:54
47 lines
2858 bytes
In article <fwwJ7.41616$XM4.1999@afrodite.telenet-ops.be>, "Kris Wauters"
<wauters.kris@pandora.be> wrote:

> kan iemand gewoon verklaren wat er in beide van onderstaande regels
> gebeurt ? (eventueel met een binair voorbeeldje)
> 
> h = (128 | ((char) val & 0x7f)) >>4;
> l = (128 | ((char) val & 0x7f)) &15;

voorbeeldje:
val = 87 ('k zeg zo maar iets) = 0x57 = 0b01010111 (char) val blijft
hetzelfde, 't is al maar een byte groot

128 = 0x80 = 0b10000000		(geen officiele notatie, maar kom)
0x7f = 0b01111111
15 = 0x0F = 0b00001111

h = (0b10000000 | (0b01010111 & 0b01111111)) >> 4;
  = (0b10000000 | 0b01010111) >> 4;		// hoogste bit op 0 gezet
  =  0b11010111 >> 4;					// hoogste bit op 1 gezet
  = 0b00001101;							// 4 bits naar rechts geshift

Ik begrijp niet goed waarom eerst het hoogste bit op 0 wordt gezet en
daarna weer op 1... tenzij die &0x7F dient om zeker alleen op de laagste 7
bits te werken en op die manier eventuele andere bytes weg te gooien, maar
dat heeft geen nut want daar heeft die char-casting al voor gezorgd.
Hoedanook, het resultaat is uiteindelijk de hoogste nibble (=halve byte),
maar dan met het hoogste bit daarvan op 1 gezet.

l = (0x10000000 | (0b01010111 & 0b01111111)) & 0b00001111;

Left as an exercise for the reader.
Het resultaat zal deze keer de laagste nibble zijn, wederom met het
hoogste bit daarvan op 1 gezet.

Ik zou dat op het eerste zicht zo doen:

h = ((val >> 4) | 0x08) & 0x0f;
l = (val | 0x08) & 0x0f;

maar of dat beter/performanter/leesbaarder is weet ik eigenlijk niet.

-- 
Roel Schroeven
x3jmyi0yrrn3h001@sneakemail.com (anti-spam email address from sneakemail.com)

"Don't blame me if there are bugs. Blame the cute, furry one." - Rusty Russell
Technical Details
Message-ID: <pan.2001.11.18.02.54.09.705.1638@sneakemail.com>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!supernews.com!newsfeed.direct.ca!look.ca!opentransit.net!newsfeeds.belnet.be!news.belnet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mail
References: <fwwJ7.41616$XM4.1999@afrodite.telenet-ops.be>

Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit
X-Google-Thread: fcea4,382cfc12436a37
X-Google-Attributes: gidfcea4,public
X-Google-ArrivalTime: 2001-11-17 17:54:11 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!supernews.com!newsfeed.direct.ca!look.ca!opentransit.net!newsfeeds.belnet.be!news.belnet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mail
From: "Roel Schroeven" <x3jmyi0yrrn3h001@sneakemail.com>
Subject: Re: andere C vraag
Newsgroups: be.comp.programming
Message-ID: <pan.2001.11.18.02.54.09.705.1638@sneakemail.com>
References: <fwwJ7.41616$XM4.1999@afrodite.telenet-ops.be>
User-Agent: Pan/0.10.0 (Unix)
Mime-Version: 1.0
Content-Type: text/plain; charset=ANSI_X3.4-1968
Content-Transfer-Encoding: 8bit
X-Comment-To: "Kris Wauters" <wauters.kris@pandora.be>
Lines: 47
Date: Sun, 18 Nov 2001 01:54:10 GMT
NNTP-Posting-Host: 213.119.35.185
X-Complaints-To: abuse@pandora.be
X-Trace: afrodite.telenet-ops.be 1006048450 213.119.35.185 (Sun, 18 Nov 2001 02:54:10 MET)
NNTP-Posting-Date: Sun, 18 Nov 2001 02:54:10 MET
Organization: Telenet Internet