0
votes

Bitwise et et: symbole

J'ai codé pendant presque deux mois maintenant et je commence juste à faire "couramment" avec les bases de la langue. Récemment, je suis tombé sur un morceau de code qui ressemblait donc:

if (! (n & 1)) {
    median += a[n / 2 - 1];
    median /= 2;
}

map<int, int> f;

for (int e : a) {
    f[e]++;
}

int mode = 0;

for (auto e : f) {
    if (e.second > f[mode]) {
        mode = e.first;
    }
}


5 commentaires

en.cppreference.com/w/cpp/language/range-for


en.cpprefreence.com/w/cpp/language/operator_logical


Je cherchais une réponse à Cplusplus.com où ils n'expliquent pas la meilleure façon possible. Merci beaucoup!


en.cpprefreence.com/w/cpp/language/Operator_arithmetic


Si vous avez une réponse qui aide, acceptez-la; Ou écrivez votre propre réponse si la non des réponses données a aidé suffisamment. Ne modifiez pas "Résolu" dans le titre.


3 Réponses :


2
votes

pour le bitwise et il vérifie si n est même. Il fonctionne de la manière suivante: Si le dernier bit in n est un 1 (lequel il est pour chaque nombre impair), le résultat de N & 1 sera 1, sinon ce sera 0. Étant donné que n'importe quoi! = 0 est évalué à vrai En C ++, il invoque ce chèque. Puisque l'expression entière est retournée par le "!" Il évaluera à FALSE lorsque N est impair et vrai lorsque n est même.

Comme exemple, prenne n = 3, n = 4, n = 5 et les représentent en binaire: P>

for (int e : a)


5 commentaires

Merci beaucoup! C'est assez compliqué, le bitwise je veux dire, non?


C'est un moyen un peu inintucieux de l'écrire, le moyen plus courant de l'écrire comme (n% 2 == 0) comme dans "si n est uniformément divisible par 2".


Oui, c'est ce que j'ai fait dans cette affectation. (C'est un code que le tuteur d'une classe en ligne nous a donné, mais il nous a dit que nous ne l'apprendrions pas pendant un moment, mais je ne suis pas assez patient pour attendre: p).


@iaminsensible n'est pas vraiment compliqué; Vous avez juste deux chiffres représentés en binaire et comparer chacun de leurs chiffres - si le premier chiffre est un chiffre de 1 et deuxième chiffre est un résultat 1, sinon le résultat est une même avec ou sauf là la logique est; Si le premier chiffre est un chiffre de 1 ou deuxième chiffre est un résultat 1 est un 1 sinon il est un 0. XOR (exclusif ou) est similaire; Si le premier ou le deuxième chiffre ( un seul d'entre eux ) est un résultat 1 résultat sinon 0.


Merci. Au fait, j'ai lu la documentation de CPPRARefence et si je comprenais correctement, si nous avons une boucle: pour (Auto N: a) {...} (où A est un tableau avec 5 éléments) Le corps de la boucle sera exécuté 5 fois, ou n fois où n est égal au nombre d'éléments de tableau.



0
votes

Si N est même, la conversion en binaire entraînera quelque chose comme 1010, le moins important étant toujours 0. Si vous et 0 et 1, vous obtenez 0. La première si la boucle si elle est de vérifier si n est même.

pour les opérations bitwises - 1. Convertir le numéro en binaire. 2. Effectuez une opération sur un peu individuel. par exemple. 3 & 6 = 011 & 110 = 010 = 2


0 commentaires

2
votes

! (N & 1)

Posez-les en tant que champignon, exemple : P>

for(auto it=std::begin(f); it!=std::end(f); ++it) {
    auto e = *it;


0 commentaires