[elektro] bináris konstans

Papp Zoltán zombi at c2.hu
Thu Aug 7 21:38:01 CEST 2008


2008.08.07. 20:11:42 dátumon Nemeth Tibor <neti at starkingnet.hu> írta:

> Acs Gabor wrote:
>
>> Sziasztok!
>>
>> Létezik, hogy az MPLAB C30-ban lehetett bináris konstans formátumot  
>> megadni, a C32-ben meg nem? A C30 user manualban benne van, a C32-ben  
>> nincs. Ha jól tudom, ez nem része az ANSI C-nek, de azért mikrovezérlős  
>> fordítókba be szokták tenni. Vagy még ennyire az elején tart a C32, és  
>> majd egyszer bekerül? Minden ismert formátumot próbáltam, nem veszi be.
>
> Hali!
>
> Ezek szerint fordítóból is 10 féle van, amelyik ismeri a bináris
> számokat és amelyik nem. :-)
>
> Üdv.
>            Németh Tibor
>

Én egy ilyet szoktam betenni pl. 'IAR C for AVR' forráskódba (ő sem ismeri  
alapból a bináris konstansokat):

#define _binary_convert_(b)  
((b%10?1:0)+((b/10)%10?2:0)+((b/100)%10?4:0)+((b/1000)%10?8:0)+((b/10000)%10?16:0)+((b/100000)%10?32:0)+((b/1000000)%10?64:0)+((b/10000000)%10?128:0))
#define bin8(b) _binary_convert_((unsigned long)(b##.0)) //ha a bin. szám  
0-val kezdődik, akkor oktálisnak veszi a preproc, a tizedespont  
visszaalakítja decimálissá

Használata:
a=bin8(10100011);
b=bin8(00001111);
c=bin8(110);
d=bin8(1);
stb...

van még egy kiegészítés, 16/32 bites cuccokra, bájtonként vesszővel  
szeparálva, az átláthatóság miatt:

#define bin16(h,l) (bin8(h)*256UL+bin8(l))
#define bin32(hh,hl,lh,ll) (bin16(hh,hl)*65536UL+bin16(lh,ll))

x=bin16(10101010,01010101);
stb...

Üdv

-- 
Papp Zoltán
OneWay Electronics Kft
Hangszerviz
szkájpi: oneway[aláhúzás]papp[aláhúzás]zoltan



More information about the Elektro mailing list