Article View: be.comp.programming
Article #12364Re: andere C vraag
From: Roel Schroeven
Date: Sun, 18 Nov 2001 01:54
Date: Sun, 18 Nov 2001 01:54
47 lines
2858 bytes
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-mailReferences:
<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