[PYTHON] Logische Operation / Bitoperation 0

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

und · logisches Produkt

Gibt nur dann 1 zurück, wenn x und y beide 1 sind. Es ist eine Beschreibung von x & y im Quellcode. Es scheint, dass x ・ y und x & y in einigen Erklärungen und Problemsätzen geschrieben sein können.

oder ・ Logische Summe

Gibt 1 zurück, wenn mindestens eines von x und y 1 ist. Im Quellcode ist es die Beschreibung von x | y. Es scheint, dass x + y in einigen Erklärungen und Problemsätzen geschrieben sein kann.

xor ・ Exklusive logische Summe

Gibt 1 zurück, wenn nur eines von x und y 1 ist. Es wird die Beschreibung von x ^ y im Quellcode sein.

nicht / leugnen

Es ist umgedreht. Es wird im Quellcode als ~ x beschrieben.

Bitoperation.py


x=7 #0111 in binärer Notation
y=11 #1011 in binärer Notation

#Logisches UND
x&Da y die 1. und 2. Stelle ist, in der 1 in beiden Binärnotationen gesetzt ist, ist es 3 in Dezimalzahl.

#Logische Summe
x|y ist 15 in Dezimalschreibweise, da 1 in einer oder beiden der 1. bis 4. Stelle in Binärschreibweise gesetzt ist.

#Exklusive logische Summe
x^y ist in binärer Notation und nur einer von ihnen hat 1 in der 3. und 4. Stelle, also 12 in Dezimalschreibweise.

#Verweigerung
~x ist etwas invertiert und 1 steht in der 4. Ziffer?In Dezimalzahl-Das Vorzeichen wird ebenfalls mit 8 invertiert.

Ja, x = 7 ist 0111, y = 11 ist 1011, maskiert mit logischer Summe, wird 1111 und der Wert 15 in Dezimalzahl wird ausgegeben, ich wusste nicht, was es war, und ich habe eine Bitoperation für die Schleife durchgeführt Ich dachte darüber nach, welche Art von Arbeit es am Morgen tun würde, um es zu nutzen, und fand ein Beispiel dafür, dass es wahrscheinlich so war.

Ich frage mich, ob es so geschrieben ist, wenn es für andere Probleme verwendet wird.py


#Bitoperation für Schleifenvorlage im letzten Artikel geschrieben?
youso =Anzahl der angegebenen Elemente(Anzahl der Farben und Rucksack)
seigen =Sie können bis zu 2 Farben wählen und 10 oder weniger wiegen

max_value= -1
#Anscheinend die äußerste Reichweite(1<<Elementanzahl)Es ist wie beim Schreiben.
for all in range(1<<youso):
#Setzen Sie den Anfangswert von Gewicht und Wert, der aus jeder Kombination hervorgeht, auf 0
    sum_weight = 0
    sum_value = 0

#Eine kleine unbekannte Elementnummernschleife
    for i in range(youso):
#Eine andere Methode zur Bitprüfung. Es scheint. .. ..
#Bit steht(1)Wenn Sie sich entscheiden, dass Sie es verwenden, stehen Sie nicht(0)Wenn ja, frage ich mich, ob es als nicht verwendet beurteilt wird. .. ..
        if (all>>i & 1):
#Fügen Sie das Gewicht und den Wert der Elemente hinzu, deren Verwendung bestimmt ist
            sum_weight += weight[[i]
            sum_value += value[i]
    if sum_weight<=W:
#Erstmal max_Wert ist-Da es 1 ist, Summe_Der Wert des Wertes wird zugewiesen.
#Ab dem zweiten Mal beträgt die größere Anzahl max_Es scheint dem Wert zugeordnet zu sein.
        max_value = max(max_value,sum_value)
print max_value

Ich habe gehört, dass es ein Highschool-Mädchen gibt, das Teilzeit mit mir und Naka in einem Supermarkt arbeitet. Weder ich noch Naka-chan haben bisher einen wöchentlichen Arbeitsplan. Zählen Sie dann in der logischen Summe, wie viele Kombinationen eine oder beide funktionieren. Alle Kombinationen sind ich (Arbeit, Urlaub) Naka-chan (Arbeit, Urlaub), 4 Kombinationen in 7 Tagen, 16384.

Naka-Chan und Teilzeitjob.py


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

####Vorbereitung der Speicherauslastung und Betriebszeitprüfung
from guppy import hpy
import time
start = time.clock()
h = hpy()
####Bis hierher
#Wenn das Gebiss steht, gehen Sie zur Arbeit, wenn nicht, ist es ein Feiertag.
#Meine maximale Anzahl von Arbeitstagen beträgt nur 7 Tage die Woche.
i=7
#Maximale Anzahl von Arbeitstagen für Naka-chan(ry
n=7

#Wenn entweder ich oder Naka-chan oder beide bei der Arbeit sind, der Schalter
cnt=0

for x in xrange(1<<i):
    for y in xrange(1<<n):
#x|Wenn y 127 ist, ist die Bedingung erfüllt.
        if x|y==127:
            cnt+=1
print (cnt)

####Speichernutzung und Betriebszeitausgabe
end = time.clock()
print (h.heap())
print (end - start)

i und n werden einzeln addiert. Wie ist der Zustand, wenn n beispielsweise 48 ist? http://www.nowshika.com/joso/img11012150.png

Wenn die Zahl 48 ist, werden die Bits von rechts auf 4,5 gesetzt, und von dort wird die Information erstellt, dass Dienstag und Mittwoch funktionieren werden. Wenn alle Bits von 0 bis 6 gesetzt sind, wird es 127, so dass 127 der logischen Summe von x | y verwendet wird, um zu beurteilen, ob die Bedingung erfüllt ist. Es gibt 3 Kombinationen und 2187 in 7 Tagen, bei denen entweder ich oder Naka-chan oder beide zur Arbeit gehen.

Nun, was soll ich sagen? .. .. Wenn ich es richtig las, wurde es sorgfältig geschrieben, aber mein Gehirn war nicht genug. Referenz TopCoder Round-Robin-Spezialfunktion des Diagnostikers für Anfänger http://d.hatena.ne.jp/shindannin/20111202/1322833089

Bitverschiebung

Nach links verschieben

x = 1 << 7 #x ist 128 Im obigen Fall wird 1 siebenmal nach links verschoben, sodass es in binärer Notation 10000000 ist.

Nach rechts schalten

x = 1 >> 7 #x ist 0 Im obigen Fall steht 1 nicht im Doko, also ist es 0 (wahrscheinlich). x = 7 >> 1 #x ist 3 Im obigen Fall wird 7 einmal von 111 in binärer Notation nach rechts verschoben, so dass es 011 und 3 in Dezimalschreibweise wird.

Ja. Ich benutze es schon lange und die Schleife von 1 << Elementen beträgt ebenfalls 7 Tage, also 1 << 7

python


 Ich habe 128 Mal geloopt, aber da es bei 0 beginnt, war der letzte Wert in der Schleife 1111111. ..


#### Nachtrag Hinweis Angenommen, die Zahl ist positiv. .. .. ..
[http://codeforces.com/contest/76/problem/D](http://codeforces.com/contest/76/problem/D)
 Zusätzliche Hinweise, um sich mit Bitoperationen aus den oben genannten Problemen vertraut zu machen
 - Zwei Nummern, A und B, sind angegeben.
 ・ A = X + Y (Vier Regeln, keine logischen Operationen)
 ・ B = X ^ Y (xoder logische Operation, exklusive logische Summe)

 Bei der logischen Berechnung wird die größere Zahl 1111 ... niemals überschritten.
 Wenn beispielsweise 142 auf Bitanzeige eingestellt ist, '0b10001110' mit positiver / negativer Anzeige am Anfang und '10001110' ohne Anzeige.
 Die Zahl, in der dies mit dem Maximum 1 gefüllt ist, ist '0b11111111' oder '11111111'. 255 in Dezimalzahl. Da es keine Verschleppung gibt, wird es niemals größer sein als die mit 1 gefüllte Zahl.
 Die Summe der vier Regeln und das Ergebnis von xor mögen gleich sein, aber es gibt keinen Fall, in dem xor (wahrscheinlich) größer ist. ..
 Paare, von denen erwartet wird, dass sie ein größeres xoder Ergebnis haben, sind Paare, die sich dort, wo die Bits passieren, nicht überlappen.
 B. Binär ist das xor eines Paares von 111 und 111 (7 in Dezimalzahl) 000 (nicht wahr?).
 Paare, die 1, das maximiert, nicht überlappen, sind 101 und 010 (5 und 2 in Dezimalzahl) Paare sind 111 in Binärschreibweise und 7 in Dezimalschreibweise.
 Wenn daher die Position von 1 dupliziert wird, ist das Ergebnis von xor kleiner als das Ergebnis der Summe der vier Regeln, da kein Übertrag vorliegt.
 Es scheint bewiesen zu sein, dass das Ergebnis des Paares, bei dem erwartet wird, dass die Stelle von 1, an der das Ergebnis von xor maximiert werden soll (effizienter?) Nicht überlappt, auch dem Ergebnis der Summe der vier Regeln entspricht.

 Geübte Operationen, die ich nicht verwenden kann


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

#Als Beispiel n=142
>>> bin(n)
'0b10001110'
>>> bin(n)[2:]
'10001110'
#Ein solcher Zustand
 
#len -Maximalwert mit 1-Bit-Verschiebung
>>> (1<<len(bin(n)[2:]))-1
255
 
#Auch bin wird alles 1
>>> bin((1<<len(bin(n)[2:]))-1)
'0b11111111'
>>> bin((1<<len(bin(n)[2:]))-1)[2:]
'11111111'
 
#Wenn xor fertig ist, verschwindet die führende 0, so dass es so aussieht, als ob sie nicht richtig ausgerichtet ist.
#0 von rechts gesehen,1 Inversion
>>> bin(n^255)
'0b1110001'
>>> bin(n^255)[2:]
'1110001'

2013/11/01 22:18 Wir haben kleinere Korrekturen und Ergänzungen an Naka-chan vorgenommen. 2013/11/03 27:50 Informationen zur Bitverschiebung hinzugefügt. 2014/03/04 23:16 Hinzugefügt, dass ich ein wenig bestätigt habe. Ich kann das Toco nicht verstehen, das nützlich zu sein scheint.

Recommended Posts

Logische Operation / Bitoperation 0
Bitoperation
Stolperstein der Python-Logik
Bitmaske
Waren- (Kürzungs-) / Restberechnung durch Bitberechnung
Bitberechnung des Ringpuffers (hohe Geschwindigkeit)