Vymazání bitů – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Vymazání bitů – C / C++ – Fórum – Programujte.comVymazání bitů – C / C++ – Fórum – Programujte.com

 

oxidián0
Grafoman
6. 8. 2017   #1
-
0
-

V následujícím kódu jsem na test nastavil hodnotu čísla na 196611.

Nyní chci vymazat první dva byty, respektive, mi stačí vymazat bit 17 a 18 zleva.

Jsou to ty dvě jedničky zastupující číslo 196608.

Když provedu LSB |= m[i] && ~0xFFFF0000;

tak LSB má být 3 a dostávám 1.

for (i = 0; i<11; )
       {
       /////////////////000000001111111100000000
       m[i] = 0b000000110000000000000011; // 196611
       m[i+1] = 0b000000110000000000000011; // 196611
       LSB <<= 32;
       LSB |= m[i] && ~0xFFFF0000; // 16 bits LSB
       LSB <<= 16;
       LSB |= m[i+1] && ~0xFFFF;
       i += 2;
       }

Co dělám špatně?

Nahlásit jako SPAM
IP: 78.102.61.–
gna
~ Anonymní uživatel
1891 příspěvků
6. 8. 2017   #2
-
0
-

Máš tam logický and (&&), chceš bitový (&).

Nahlásit jako SPAM
IP: 213.211.51.–
6. 8. 2017   #3
-
0
-

Jaký má význam posun o 32 bitů? Co je LSB za datový typ?

hu

Nahlásit jako SPAM
IP: 193.86.81.–
oxidián0
Grafoman
6. 8. 2017   #4
-
0
-

#2 gna
To se nezdá jak taková maličkost dokáže ovlivnit celý program :-) Dík

Nahlásit jako SPAM
IP: 78.102.61.–
oxidián0
Grafoman
6. 8. 2017   #5
-
0
-

#3 hlucheucho
Int. Vnulování čísla. Leč uznávám že lepší bude dát tam LSB = 0;

Nahlásit jako SPAM
IP: 78.102.61.–
Ovrscout
~ Anonymní uživatel
113 příspěvků
7. 8. 2017   #6
-
0
-

#5 oxidián
Pro info, pokud je LSB 32bitove cislo bez znamenka (předpokládám). Tak je operace LSB <<= 32; nedefinovaná (v ansi c).

Tj může to dělat cokoliv. většinou to buď hodnotu vynuluje nebo ji to ponechá nezměněnou, záleží na platformě.
navíc se můžou objevit problémy/rozdíly při kompilaci se zapnutou optimalizací/nebo bez.

např zde

Nahlásit jako SPAM
IP: 193.165.79.–
Ovrscout
~ Anonymní uživatel
113 příspěvků
7. 8. 2017   #7
-
0
-

 #5 oxidián
Int. Vnulování čísla. Leč uznávám že lepší bude dát tam LSB = 0;]

doufám že unsigned int :) , bitové operace nad znaménkovým typem snadno sklouznou do undefined/unspecified části ansi c. Pravidla jsou tu trochu složitější, skus hledat na webu.

Nahlásit jako SPAM
IP: 193.165.79.–
7. 8. 2017   #8
-
0
-

#7 Ovrscout
píše int, ten bývá defaultně signed. 

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 88 hostů

Podobná vlákna

C# Vymazani souboru — založil aTTix

Vymazani IE cache v C — založil machis

Delphi - vymazání obrázku — založil kokos!

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý