r/italy Jul 11 '18

/r/italy Caffè Italia * 11/07/2018

Buongiorno cavaliere, il solito?

22 Upvotes

798 comments sorted by

View all comments

3

u/sdaxddx Panettone Jul 11 '18 edited Jul 11 '18

Aiutino in C++? Cosa fa questa operazione : if( x&((pippo)1) ), con x e pippo (type)definiti come unsigned int? La prima parte bitwise la comprendo, non comprendo quell'operazione a 1. Edit: grazie in anticipo ovviamente per qualsiasi aiuto.

Inoltre, conoscete qualche discord o simili dove posso chiedere per evenienze del genere (farmi molestare verbalmente su Stackoverflow anche no)

7

u/srandtimenull Jul 11 '18

Innanzitutto, mettiamolo in verbatim che mi fanno male gli occhi

if (x & ((pippo)1))

1 viene castato a pippo (e non ne capisco il motivo, tanto ha lo stesso valore in bit sia come int che come unsigned int).

Quindi, fa l'and bit a bit tra x e 000...001, ovvero, ritorna 1 se l'LSB di x è 1, altrimenti ritorna 0.

Non capisco perché non sia stato scritto semplicemente

if (x & 1)

che otterrebbe lo stesso identico effetto (e probabilmentesicuramente lo stesso assembly).

4

u/Luck88 Emilia Romagna Jul 11 '18 edited Jul 11 '18

username checks out

5

u/srandtimenull Jul 11 '18

Il primo che me lo dice, yeah!

2

u/Luck88 Emilia Romagna Jul 11 '18

Evvai, 5 anni di informatica liceo servono a qualcosa (no non è vero ho delle conoscenze minime e estremamente limitate)

2

u/sdaxddx Panettone Jul 11 '18 edited Jul 11 '18

Grazie per la spiegazione. Come detto devo fare la tesi basata su una struttura già esistente. Bisogna avere fede e continuare.

3

u/srandtimenull Jul 11 '18

Guarda, lavoro seriamente con C e C++ da appena 5 anni, tra università e lavoro.

A volte certe assurdità hanno perfettamente senso per motivi strani. Il crimine è non spiegarle con un commento.

1

u/sdaxddx Panettone Jul 11 '18

Poi però commentano cose come i getters.

2

u/srandtimenull Jul 12 '18

Noto con piacere che non hai mai lavorato con la metodologia Agile.

è più importante avere software funzionante che documentazione

E poi la gente non commenta niente. Anche cose come

Pippo const * const super = (Pippo*)(opaque - offsetof(Paperino, tyepof(super));

Per poi magari sfanculare il const più avanti.

1

u/sdaxddx Panettone Jul 12 '18

Ogni volta credo di aver imparato le basi di C++, poi vedo questi snippet e non so nemmeno se sappia leggere.

2

u/srandtimenull Jul 12 '18

Premettiamo che lo snippet è C, non C++. In C++ questa roba assurda non serve, perché hai l'ereditarietà già implementata.

Il C++ è un linguaggio enorme, complesso e in continua evoluzione. Io ho imparato davvero il C++ con il C++98. Poi ho imparato il C++11.

Se mi chiedi di programmare in C++14/17 mi trovi in seria difficoltà.

Ricorda che non solo il C e il C++ sono linguaggi completamente diversi, ma che anche al loro interno ci sono differenze enormi. C++98 e C++17 sono enormemente distanti. Oppure prova a guardare le proposte per il C++20.

1

u/WikiTextBot Jul 12 '18

C++20

C++20 is the informal name for the revision of the ISO/IEC standard for the C++ programming language expected to follow C++17.

The C++ Standards Committee began planning C++20 in July 2017. The current draft is N4750.Below is a partial list of changes that have been proposed or discussed for inclusion into C++20.


[ PM | Exclude me | Exclude from subreddit | FAQ / Information | Source ] Downvote to remove | v0.28

1

u/sdaxddx Panettone Jul 12 '18

Ma infatti più che imparato avrei dovuto scrivere "aver confidenza".

Non credo che imparerò mai, in modo soddisfacente, un linguaggio di programmazione fino ad almeno la laurea magistrale. Ora tutto ciò che studio è in Java, ma scemo io la tesi l'ho voluta fare in C++ senza averlo mai studiato.

O magari in estate mi leggo il Stroustrup. Magari...

2

u/srandtimenull Jul 12 '18

O magari in estate mi leggo il Stroustrup

Ecco, quello è un gran bel libro per documentarsi.

1

u/srandtimenull Jul 11 '18

Guarda, lavoro seriamente con C e C++ da appena 5 anni, tra università e lavoro.

A volte certe assurdità hanno perfettamente senso per motivi strani. Il crimine e non spiegarle con un commento.

3

u/simoneb_ Earth Jul 11 '18

Casta 1 a unsigned int, quindi applica l'operazione bitwise con x

In pratica la condizione è vera se il bit più basso di x è 1, con x unsigned int

La prossima volta mi spiegherai perché l'hai chiamato pippo invece di unsigned int

2

u/sdaxddx Panettone Jul 11 '18

Mmh, avevo dubbio sul cast perché pensavo facesse automaticamente, grazie mille!

3

u/simoneb_ Earth Jul 11 '18

I cast automatici son più le volte che fanno la cosa sbagliata che viceversa

2

u/sdaxddx Panettone Jul 11 '18

Il codice non è mio, e pippo e x sono delle celle di un bitset (bitset di celle unsigned int). A questo metodo, da quanto ho capito, gli passi x e finché è vero (!=0 immagino) fa quello snippet, aumenta il contatore se vero e downshifta di 1 x.

Un po' una rottura.

E hanno fatto bene a castare, essendo codice di basso livello.