[PYTHON] Opération logique / opération sur bit 0

Oui. http://www.nowshika.com/joso/img11010224.png

et · produit logique

Renvoie 1 uniquement si x et y sont tous deux 1. C'est une description de x & y dans le code source. Il semble que x ・ y et x & y peuvent être écrits dans certaines explications et phrases problématiques.

ou ・ Somme logique

Renvoie 1 si au moins l'un de x et y est égal à 1. Dans le code source, c'est la description de x | y. Il semble que x + y puisse être écrit dans certaines explications et phrases problématiques.

xor ・ Somme logique exclusive

Renvoie 1 si un seul de x et y vaut 1. Ce sera la description de x ^ y dans le code source.

pas / déni

C'est retourné. Il est décrit comme ~ x dans le code source.

Opération de bit.py


x=7 #0111 en notation binaire
y=11 #1011 en notation binaire

#ET logique
x&Puisque y est le 1er et le 2ème chiffres dans lesquels 1 est défini dans les deux notations binaires, il est 3 en décimal.

#Somme logique
x|y vaut 15 en notation décimale car 1 est défini dans l'un ou les deux des 1er à 4e chiffres en notation binaire.

#Somme logique exclusive
x^y est en notation binaire, et un seul d'entre eux a 1 dans les 3e et 4e chiffres, donc c'est 12 en notation décimale.

#le déni
~x est un peu inversé et 1 correspond au 4e chiffre?En décimal-Le signe est également inversé avec 8.

Oui, x = 7 est 0111, y = 11 est 1011, masqué avec la somme logique, devient 1111 et la valeur de 15 en nombre décimal sort, je ne savais pas ce que c'était, et j'ai fait une opération de bit pour la boucle Je réfléchissais au genre de travail que cela ferait pour l'utiliser le matin, et j'ai trouvé un exemple montrant que c'était probablement comme ça.

Je me demande si c'est écrit comme ça lorsque je l'utilise pour d'autres problèmes.py


#Opération de bit pour le modèle de boucle écrit dans l'article précédent?
youso =Nombre d'éléments donnés(Nombre de couleurs et sac à dos)
seigen =Vous pouvez choisir jusqu'à 2 couleurs et un poids de 10 ou moins

max_value= -1
#Apparemment, la plage la plus externe(1<<Nombre d'éléments)C'est comme écrire.
for all in range(1<<youso):
#Définissez la valeur initiale du poids et de la valeur qui sort de chaque combinaison sur 0
    sum_weight = 0
    sum_value = 0

#Une petite boucle de numéro d'élément inconnu
    for i in range(youso):
#Une autre méthode de vérification des bits. Il semble. .. ..
#Bit est debout(1)Si vous décidez que vous l'utilisez, vous n'êtes pas debout(0)Si tel est le cas, je me demande s'il est jugé non utilisé. .. ..
        if (all>>i & 1):
#Ajouter le poids et la valeur des éléments jugés en cours d'utilisation
            sum_weight += weight[[i]
            sum_value += value[i]
    if sum_weight<=W:
#Première fois max_La valeur est-Puisqu'il est 1, somme_La valeur de valeur est attribuée.
#À partir de la deuxième fois, le plus grand nombre est max_Il semble être attribué à la valeur.
        max_value = max(max_value,sum_value)
print max_value

J'ai entendu dire qu'il y a une lycéenne qui travaille à temps partiel avec moi et Naka dans un dépanneur. Ni moi ni Naka-chan n'avons encore un horaire de travail hebdomadaire. Ensuite, dans la somme logique, comptez le nombre de combinaisons que l'une d'elles ou les deux fonctionnent. Toutes les combinaisons sont moi (travail, vacances) Naka-chan (travail, vacances), 4 combinaisons en 7 jours, 16384.

Naka-chan et travail à temps partiel.py


#!/usr/bin/env python
# -*- coding:utf-8 -*-
from __future__ import print_function
import sys
import io
import re
import math

####Préparation du contrôle de l'utilisation de la mémoire et du temps de fonctionnement
from guppy import hpy
import time
start = time.clock()
h = hpy()
####Jusqu'ici
#Si le mors est debout, allez travailler, sinon, c'est un jour férié.
#Mon nombre maximum de jours ouvrables est de 7 jours sur 7 seulement.
i=7
#Nombre maximum de jours ouvrables pour Naka-chan(ry
n=7

#Si moi ou Naka-chan, ou les deux, sommes au travail, le compteur
cnt=0

for x in xrange(1<<i):
    for y in xrange(1<<n):
#x|Si y vaut 127, la condition est satisfaite.
        if x|y==127:
            cnt+=1
print (cnt)

####Utilisation de la mémoire et sortie du temps de fonctionnement
end = time.clock()
print (h.heap())
print (end - start)

i et n sont ajoutés un par un, alors quel est l'état lorsque n vaut 48, par exemple? http://www.nowshika.com/joso/img11012150.png

Lorsque le nombre est 48, les bits sont définis de la droite à 4,5, et à partir de là, les informations selon lesquelles mardi et mercredi vont fonctionner sont établies. Lorsque tous les bits de 0e à 6e sont mis à 1, il devient 127, donc 127 de la somme logique de x | y est utilisée pour juger que la condition est satisfaite. Soit moi, soit Naka-chan, soit les deux, irons travailler en 3 combinaisons et 2187 en 7 jours.

Eh bien, que dois-je dire? .. .. Si je l'ai lu correctement, il a été écrit avec soin, mais mon cerveau ne suffisait pas. Référence Fonction spéciale TopCoder Round-robin du diagnostic pour les débutants http://d.hatena.ne.jp/shindannin/20111202/1322833089

Décalage de bits

Déplacer vers la gauche

x = 1 << 7 #x vaut 128 Dans le cas ci-dessus, 1 est décalé vers la gauche 7 fois, donc il est de 10000000 en notation binaire.

Déplacer vers la droite

x = 1 >> 7 #x vaut 0 Dans le cas ci-dessus, 1 ne restera pas dans le doko, donc ce sera 0 (probablement). x = 7 >> 1 #x vaut 3 Dans le cas ci-dessus, 7 est décalé une fois vers la droite de 111 en notation binaire, il devient donc 011 et il devient 3 en notation décimale.

Oui. Je l'utilise depuis longtemps, et la boucle de 1 << éléments est également de 7 jours, donc 1 << 7

python


 J'ai bouclé 128 fois, mais depuis qu'il commence à 0, la dernière valeur de la boucle était 1111111. ..


#### Remarque PostScript En supposant que le nombre est positif. .. .. ..
[http://codeforces.com/contest/76/problem/D](http://codeforces.com/contest/76/problem/D)
 Notes supplémentaires pour se familiariser avec les opérations sur les bits des problèmes ci-dessus
 -Deux nombres, A et B, sont donnés.
 ・ A = X + Y (Quatre règles, pas des opérations logiques)
 ・ B = X ^ Y (xor d'opération logique, somme logique exclusive)

 Dans le calcul logique, le plus grand nombre 1111 ... n'est jamais dépassé.
 Lorsque, par exemple, 142 est réglé sur l'affichage bit, '0b10001110' avec affichage positif / négatif au début et '10001110' sans affichage.
 Le nombre dans lequel il est rempli avec le maximum 1 est «0b11111111» ou «11111111». 255 en décimal. Puisqu'il n'y a pas de report, il ne sera jamais plus grand que le nombre rempli avec 1.
 La somme des quatre règles et le résultat de xor peuvent être égaux, mais il n'y a aucun cas où xor est plus grand (probablement). ..
 Les paires qui devraient avoir des résultats xor plus grands sont des paires qui ne se chevauchent pas là où les bits passent.
 Par exemple, en binaire, le xor d'une paire de 111 et 111 (7 en décimal) est 000 (n'est-ce pas?).
 La paire maximale de 1 qui ne se chevauche pas est 101 et 010 (5 et 2 en décimal). La paire est 111 en notation binaire et 7 en notation décimale.
 Par conséquent, si l'emplacement de 1 est dupliqué, le résultat de xor sera plus petit que le résultat de la somme des quatre règles car il n'y a pas de report.
 Cela semble être prouvé car le résultat de la paire où la place de 1 où le résultat de xor est censé être maximisé (plus efficacement?) Ne se chevauche pas est également égal au résultat de la somme des quatre règles.

 Opérations pratiquées que je ne sais pas utiliser


#### **`e.`**
```python

#À titre d'exemple n=142
>>> bin(n)
'0b10001110'
>>> bin(n)[2:]
'10001110'
#Un tel état
 
#len -Valeur maximale avec décalage de 1 bit
>>> (1<<len(bin(n)[2:]))-1
255
 
#Aussi bin, tout devient 1
>>> bin((1<<len(bin(n)[2:]))-1)
'0b11111111'
>>> bin((1<<len(bin(n)[2:]))-1)[2:]
'11111111'
 
#Lorsque xor est terminé, le 0 en tête disparaît, il semble donc qu'il n'est pas aligné,
#0 vu de la droite,1 inversion
>>> bin(n^255)
'0b1110001'
>>> bin(n^255)[2:]
'1110001'

2013/11/01 22:18 Nous avons apporté des corrections mineures et des ajouts à Naka-chan. 2013/11/03 27:50 Ajout d'informations sur le décalage de bits. 2014/03/04 23:16 Ajouté que j'ai confirmé un peu. Je ne comprends pas la toco qui me semble utile.

Recommended Posts

Opération logique / opération sur bit 0
Opération de bit
Obstacle à la logique Python
Masque de bits
Marchandise (troncature) / calcul du reste par calcul de bits
Calcul des bits du tampon en anneau (haute vitesse)