OT Ceckarsky kviz

Miroslav Šinko sinkomiro@gmail.com
Čtvrtek Březen 5 13:15:50 CET 2009


MSVC6

#include <windows.h>
#include <stdio.h>

BYTE bGetVal()
{
static BYTE val=0;

	return val++;
}

int main(int argc, char* argv[])
{
WORD val16;

	val16 = bGetVal() | (bGetVal()<<8);
	printf("%.4X\n", val16);


	return 0;
}


so zatvorkami aj bez je vysledok rovnaky 0100h

miro

Dňa 5. marec 2009 13:10, Miroslav Šinko <sinkomiro@gmail.com> napísal/a:
> No ja to skusim, ale z pohladu bitoveho OR maju vyrazy vlavo a vpravo
> roznaku vahu napriek zatvorke, t.j. mali by sa vyhodnocovat zlava.
>
> miro
>
> 2009/3/5 Pavel Troller <patrol@sinus.cz>:
>> Zdravim,
>>  nu, ja si nejsem zcela jist, zda to tak je zcela dobre :-). Protoze
>> parser aritmetiky napred vyhodnoti vyraz v zavorce, takze zavola
>> GetByte(), ktere precte LSB, a dalsi GetByte() se zavola az potom a
>> to precte MSB. Tim padem budou bajty v cisle prohozeny...
>>  Pro ucely citelnosti a jistoty provedeni bych radeji volil trosku
>> komplikovanejsi zapis
>>
>>  uint8_t lo, hi;
>>  uint16_t a;
>>  ...
>>  lo = GetByte(); hi = GetByte();
>>  a = hi << 8 | lo;
>>
>>  S pozdravem Pavel Troller
>>
>>
>>> Vyraz sa vyhodnocuje zlava, t.j. z tohto pohladu ano. Ja by som pre
>>> istotu este pouzil zatvorky
>>> uint16_t a = GetByte() | (GetByte() << 8);
>>>
>>> Zatvorky pouzivam radsej viac, ako menej aj tam, kde to poradie
>>> vyhodnocovania operatorov nevyzaduje. Profesionalna cest/necest,
>>> istota je istota a je to aj pre mna prehladnejsie.
>>>
>>> miro
>>>
>>> Dňa 5. marec 2009 12:21, Jan Waclawek <konfera@efton.sk> napísal/a:
>>> > Mam nejaku funkciu, nazvime ju GetByte(), ktora mi vrati byte (uint8_t), napriklad z nejakej komunikacnej linky, alebo z nejakeho kruhoveho bufferu. Na tej linke alebo v tom bufferi je ulozene 16-bitove cislo, LSB first, a ja ho citam takto:
>>> >
>>> > uint16_t a = GetByte() | GetByte() << 8;
>>> >
>>> > Je to takto dobre?
>>> >
>>> > wek
>>> >



Další informace o konferenci Hw-list