[elektro] Megint C kérdés
Gál Zsolt
tralitoverin at freemail.hu
Wed Apr 20 14:02:22 CEST 2011
Én azt nem tudom:
long
_mullong (long a, long b)
{
long result = 0;
unsigned char i;
/* check all bits in a byte */
for (i = 0; i < 8u; i++) {
/* check all bytes in operand (generic code, optimized by the compiler) */
if (a & 0x0001u) result += b;
if (sizeof (a) > 1 && (a & 0x00000100ul)) result += (b << 8u);
if (sizeof (a) > 2 && (a & 0x00010000ul)) result += (b << 16u);
if (sizeof (a) > 3 && (a & 0x01000000ul)) result += (b << 24u);
a = ((unsigned long)a) >> 1u;
b <<= 1u;
} // for i
return result;
}
2011/4/20 Lajos Rancz <lajos.rancz at gmail.com>:
> Hello!
>
> int, aminek a szelessege pedig fordito/architektura fuggo. Hasznalj
> uint64-et makroban.
>
> Udv
>
> 2011/4/20 hg12345 <hg12345 at freemail.hu>
>
>> Hi!
>>
>> Mi a szabvány, szokvány a C-ben (nem ++!!!), a számkonstans vagy
>> helyettesítési érték meghatározásakor.
>> - 32 bit vagy 64 bit a számábrázolás?
>> - a shiftelés max 31 vagy max 63?
>>
>> ilyet szeretnék
>> #define PortTypeOut 0x03
>> #define PortO(Type,Pin) ((PortTypeOut<<Pin)<<2) /*egy meghatározás 4
>> bit*/
>> #define Port32Out (PortO(PortTypeOut,8)) /*16 bites port van)
>>
>> egy port meghatározása nem fér el 32 biten tudom, és a meghatározó
>> regiszter is csak 32bites és csak 8 bitet tud meghatározni....
>>
>> 64 bites helyettesítési értékekkel egyszerűbb a kezelése!
>> ((( igy helyettesítési érték meghatározásánál nem kell tudni, hogy a port
>> melyik részén helyezkedik el a felhasznált láb, több láb kezeléséhez
>> kell...)))
>>
>> PortX->TypeLo = Port32Out & 0xFFFFFFFF;
>> PortX->TypeHi = Port32Out >> 32;
>>
>> A sajnos az alkalmazott C-t még rálehet szedni, hogy a helyettesítési
>> értékeket uLL vagy LL ként tárolja, de shiftelést nem hajlandó 31 felett
>> kezelni....
>>
>> A GNU C ezt hogy kezeli, a problémás egy KEIL...
>>
>> üdv
>>
>>
>> -----------------------------------------
>> elektro[-flame|-etc]
>>
> -----------------------------------------
> elektro[-flame|-etc]
>
>
--
~~~~~~~~~~~~~~~~
http://galzsolt.zzl.org
More information about the Elektro
mailing list