C/C++ Biteltolás jobbra: téves az a megfogalmazás hogy ekkor mindig előjelbit lép be az értékbe?
A könyv amiből tanulok szépen leírja hogy hogy van balra meg jobbra aztán meg eléggé bezavar hogy a "jobboldalra történő biteltolás előjeltartó, a legmagasabb helyiértékű előjelbit visszaíródik"
Csináltam egy csomó próbát, és tapasztalataim alapján elmondható mind negatív mind nemnegatív esetekben:
- az értékbe bal oldalról mindig előjelbit lép be
- az értékbe jobb oldalról mindig 0 lép be
Ez elfogadható definíciónak?
Amit a könyvben írnak nem zárja ki ezt.
Ott csak az a lényeg, hogy az előjele változatlan maradjon az értéknek.
(Mert hát ugye nem lenne túl jó, ha hirtelen átugrana mondjuk a pozitív szám negatívba nemde?)
Okéoké énse arra gondoltam hogy a kettő kizárja egymást, a kérdésem az h amit írtam elfogadható? Mert az tömörebb és egyszerűbb.
"- az értékbe bal oldalról mindig előjelbit lép be
- az értékbe jobb oldalról mindig 0 lép be
Ez elfogadható definíciónak?"
Jónak tűnik.
"Compilers may also shift in the sign bit. Thus, if x is negative, the sign bit is 1, so 1's are shifted from the most significant end. If x is non-negative, 0's are shifted from the most significant end. This is called an arithmetic right shift since the sign bit is shifted in."
Csakhogy ez nem általános érvényű: oda is van írva, hogy a compiler MEGTEHETI. Az előjeles értékek jobbra shiftelése implementációfüggő működés.
"- az értékbe bal oldalról mindig előjelbit lép be
- az értékbe jobb oldalról mindig 0 lép be
Ez elfogadható definíciónak?"
nem, mert a negatív számok jobbra tolásánál nem tudhatod (undefined)
igaz:D, szóval a lényeg, kedves kérdező, erre ne alapozz, inkább
(0xF123 >> 4) & 0x0FFF
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!