Xor nasıl çalışır? VBA Mantıksal Operatörleri. Bir darbenin kenarını ve kesimini belirleme şeması

C++. Mantıksal işlemler. Bit bazında mantıksal işlemler. Vardiya işlemleri. XOR işlemi

1. Mantıksal işlemler, bitsel mantıksal işlemler ve kaydırma işlemleri hangi türlerde kullanılabilir?

Mantıksal işlemler, bit düzeyinde mantıksal işlemler ve kaydırma işlemleri yalnızca tam sayı türlerindeki işlenenlerde kullanılabilir.

2. C/C++'da hangi mantıksal işlemler kullanılıyor?

C/C++ programlama dilinde aşağıdaki mantıksal işlemler kullanılır:

  • && – mantıksal “VE”;
  • || – mantıksal “VEYA”;
  • ! – mantıksal “HAYIR”.

Mantıksal işlemlerin sonucu false veya true değeridir. C++'da false 0, true ise 1 olarak kabul edilir.

Bundan yanlış olduğu sonucuna varabiliriz< true . Например:

// mantıksal işlemler bool res; res = yanlış< true ; // res = true
3. Mantıksal işlemlerin doğruluk tablosu

Mantıksal işlemlerin doğruluk tablosu && (mantıksal “VE”), || (mantıksal "VEYA"), ! (mantıksal “HAYIR”) aşağıdaki forma sahiptir:

C/C++'da false'un 0 olduğu ve true'nun 0 olmadığı (sıfırdan farklı herhangi bir tamsayı değeri) varsayılır.

4. C++'da mantıksal işlemleri kullanma örnekleri

Örnek 1. Boolean ifadesiyle birleştirilmiş mantıksal işlem

// mantıksal işlemler bool res; int a, b; // işlem && (AND) a = 8; b = 5; res = a && b; // res = Doğru a = 0; res = a && b; // res = Yanlış // işlem || (VEYA) a = 0; b = 0; res = a || B; // res = Yanlış b = 7; res = a || B; // res = Doğru // operasyon! (mantıksal "HAYIR") bir = 0; res = !a; // res = Doğru a = 15; res = !a; // res = Yanlış

Örnek 2. Koşullu ifadelerde mantıksal işlemler. Burada if ifadesinde mantıksal bir işlemin kullanıldığı bir kod parçası bulunmaktadır.

// koşullu ifadelerdeki mantıksal işlemler int a, b; bool res; bir = 0; b = 3; res = yanlış; if (a && b) res = true ; // res = yanlış a = 0; b = 7; if (a || b) res = doğru; // res = doğru
5. C/C++'da hangi bit düzeyinde mantıksal işlemler kullanılıyor?

C/C++ dili aşağıdaki bitsel işlemleri destekler: mantıksal işlemler:

  • & – bit düzeyinde mantıksal VE (VE);
  • ^ – bitsel toplama modulo 2 (XOR - özel VEYA);
  • | – bit düzeyinde mantıksal VEYA (OR);
  • ~ – bit düzeyinde ters çevirme (DEĞİL).

İşlemler & , ^ , | ikili. Bu, iki işlenene ihtiyaç duydukları anlamına gelir. Herhangi bir işlenenin bitleri birbirleriyle aşağıdaki şekilde karşılaştırılır: kural: Birinci işlenenin 0 konumundaki bit, ikinci işlenenin 0 konumundaki bit ile karşılaştırılır. Daha sonra birinci işlenenin 1. konumundaki bit, ikinci işlenenin 1. konumundaki bit ile karşılaştırılır. Bu, tamsayı işlenenlerin tüm bitlerini karşılaştırır.

6. Bitsel mantıksal işlemlerin doğruluk tablosu

Sonucun her biti, tabloda gösterildiği gibi bit olan iki işlenene göre belirlenir.

Ters çevirme, ~ işaretinin sağında tek bir işlenen gerektirir. Sonuç, işlenenin tüm bitlerinin bit düzeyinde ters çevrilmesiyle elde edilir.

7. Mantıksal bitsel işlemlerle çalışmaya bir örnek

Unsigned short int tipinde 17 ve 45 numaralı iki sayı verilsin. Her sayı hafızada 1 byte veya 8 bit yer kaplar. Aşağıda her bitsel işlem için hesaplamanın nasıl gerçekleştiğine dair bir örnek verilmiştir.

Örnekte görüldüğü gibi her bit üzerinde belirli bir işlem gerçekleştirilir.

8. C/C++'da hangi kaydırma işlemleri kullanılıyor?

C/C++ dili iki bitsel işlem içerir vardiya:

  • << – işlenen değerini belirtilen bit sayısı kadar sola kaydırır. İşlenen, işlem işaretinin soluna yerleştirilir. Kaydırılacak bit sayısı işlem işaretinin sağında gösterilir;
  • >> – işlenen değerini belirtilen bit sayısı kadar sağa kaydırır. İşlenen işlem işaretinin soluna yerleştirilir (<<). Kaydırılacak bit sayısı işlem işaretinin sağına yerleştirilir.

Çekme bitleri kaybolur ve sıfır bitler "içeridedir". İşlenenleri 1, 2, 3 veya daha fazla rakamla sola kaydırmak, 2, 4, 8, ... ile çarpmanın en hızlı yoludur. İşlenenleri 1, 2, 3 veya daha fazla rakamla sağa kaydırmak, bölmenin en hızlı yoludur 2, 4, 8, ...

Program tamsayı işlenenlerini 2, 4, 8 vb. ile çarpma işlemini gerektiriyorsa. mümkün olduğu kadar çabuk meydana geldiğinde, sola kaydırma işleminin kullanılması tavsiye edilir.

Bu aynı zamanda bir tamsayı işlenenini hızlı bir şekilde 2, 4, 8 vb.'ye bölmeniz gereken durumlar için de geçerlidir. Bu durumlarda sağa kaydırma kullanılması tavsiye edilir.

9. Bir programda kaydırma işlemlerini kullanma örnekleri
// Shift işlemleri int a; int b; int c; bir = 15; b = -5; // sola kaydır - çarp c = bir<< 1; // c = a * 2^1 = 30 c = b << 2; // c = b * 2^2 = -20 // sağa kaydırma - bölme c = a >> 3; // c = a / 2^3 = 1 c = b >> 1; // c = b / 2^1 = -3
10. Mantıksal işlemler ile bit düzeyinde mantıksal işlemler arasındaki fark nedir?

Mantıksal işlemler iki işlenenin tüm değerini karşılaştırır. İşlenenlerin her biri doğru veya yanlış olabilir. C/C++ dili tam sayı olan işlenenlerin karşılaştırılmasına olanak sağlar. Bu durumda, 0 tamsayı değeri false değerine karşılık gelir ve sıfır olmayan (başka herhangi bir) değer, true değerine karşılık gelir.

gerçekleştirdikleri işlev, bir AND öğesi veya bir OR öğesi durumunda olduğundan biraz daha karmaşıktır. XOR kapılarının tüm girişleri eşittir ancak hiçbir giriş, çıkışı bir veya sıfıra ayarlayarak diğer girişleri engelleyemez. Tablo 4.1. Doğruluk tablosu iki girişli özel OR öğeleri
Giriş 1 Giriş 2 çıkış
0 0 0
0 1 1
1 0 1
1 1 0


Pirinç. 4.1.

Özel VEYA işlevi şu anlama gelir: yalnızca bir girişte bir tane olduğunda çıkışta bir tane görünür. Girişlerde iki veya daha fazla bir varsa veya tüm girişler sıfırsa çıkış sıfır olacaktır. Doğruluk tablosu iki girişli eleman Exclusive OR tabloda verilmiştir. 4.1. Yerli ve yabancı programlarda benimsenen tanımlar Şekil 1'de gösterilmektedir. 4.1. Exclusive OR "=1" öğesinin yerel tanımındaki yazı, girişlerde yalnızca bir ünite olduğunda durumun vurgulandığı anlamına gelir.

Standart seride az sayıda XOR öğesi vardır. Yerli seriler, OK çıkışında LP5'ten farklı olan LP5 mikro devreleri (2C çıkışlı dört adet iki girişli eleman), LL3 ve LP12 sunar. Bu öğeler tarafından çok spesifik bir işlev uygulanır.

Matematiksel açıdan XOR elemanı modulo-2 toplamı olarak adlandırılan işlemi gerçekleştirir, bu nedenle bu elemanlara modulo-iki toplayıcılar da denir. Önceki derste belirtildiği gibi, toplama modulo 2, bir daire içine alınmış bir artı işaretiyle gösterilir.

Öğelerin ana uygulaması, doğrudan aşağıdakileri takip eden Özel VEYA'dır. doğruluk tabloları, iki giriş sinyalinin karşılaştırılmasından oluşur. Girişlere iki bir veya iki sıfır gelmesi durumunda (sinyaller çakışır), çıkışta bir sıfır oluşur (bkz. Tablo 4.1). Tipik olarak bu uygulamada, elemanın bir girişine sabit bir seviye uygulanır ve bununla diğer girişe gelen zamanla değişen bir sinyal karşılaştırılır. Ancak sinyalleri ve kodları karşılaştırmak için çok daha sık özel mikro devreler kullanılır kod karşılaştırıcıları Bir sonraki derste tartışılacak olan.

Modulo 2 toplayıcı olarak XOR öğesi, döngüsel sağlama toplamlarını hesaplamak için kullanılan paralel ve seri modulo 2 bölücülerde de kullanılır. Ancak bu şemalar 14,15 numaralı derslerde ayrıntılı olarak tartışılacaktır.

XOR elemanlarının önemli bir uygulaması kontrollü bir invertördür (Şekil 4.2). Bu durumda eleman girişlerinden biri kontrol girişi olarak kullanılır ve diğer eleman girişinden bilgi sinyali alınır. Kontrol girişi bir ise giriş sinyali ters çevrilir, sıfır ise ters çevrilmez. Daha sık kontrol sinyali elemanın çalışma modunu belirleyerek sabit bir seviyeye ayarlanır ve bilgi sinyali verilir. Yani, XOR elemanı, bağlı olarak giriş sinyalinin veya kenarın polaritesini değiştirebilir veya değiştirmeyebilir. kontrol sinyali.


Pirinç. 4.2.

Aynı polaritede (pozitif veya negatif) iki sinyalin olması ve bunların eşzamanlı gelişinin hariç tutulması durumunda, bu sinyalleri karıştırmak için Özel OR öğesi kullanılabilir (Şekil 4.3). Giriş sinyallerinin herhangi bir polaritesi için elemanın çıkış sinyalleri pozitif olacaktır. Pozitif giriş sinyalleri için XOR geçidi 2OR geçidi gibi davranacak ve negatif girişler için 2AND-NOT geçidinin yerini alacak. Bu tür değiştirmeler, bazı Özel OR elemanlarının devrede kullanılmadan kaldığı durumlarda faydalı olabilir. Doğru, şunu dikkate almak gerekir yayılma gecikmesi XOR elemanındaki sinyal genellikle en basit AND, NAND, OR, NOR elemanlarındaki gecikmeden biraz daha büyüktür (yaklaşık 1,5 kat).

Pratikte en sık kullanılan iki girişli elemanlar “özel VEYA”dır. İncirde. Şekil 1, ters çevrilmemiş bir elemanın geleneksel grafik gösterimini ve durum tablosunu göstermektedir. Basitçe söylemek gerekirse, bu öğenin özü şu şekilde özetlenebilir: çıkış sinyali yalnızca girişlerdeki mantıksal seviyeler aynı olmadığında ortaya çıkar.

Bir darbenin kenarını ve kesimini belirleme şeması

Bu devrede darbeleri geciktirmek için üç XOR kapısı kullanılır. DD1.4 - toplama. Çıkış darbeleri sabit ön kenarlara ve düşen kenarlara sahiptir. Her çıkış darbesinin süresi, üç elemanın her birinin anahtarlama gecikme süresinin üç katına eşittir. Çıkış darbelerinin kenarları arasındaki zaman aralığı, giriş darbesinin süresine eşittir. Bu cihaz aynı zamanda giriş sinyalinin frekansını da iki katına çıkarır.

“Özel OR” adında ilginç bir özellik daha var. Girişlerden birine sabit bir "0" uygulanırsa, elemanın çıkışındaki sinyal giriş sinyalini tekrarlayacaktır ve "0" sabiti "1" sabitine değiştirilirse çıkış sinyali artacaktır. zaten giriş sinyalinin tersine çevrilmesidir.

Bazen bireysel standart mantıksal kapılardan "özel VEYA" kapısının elde edilmesi gerekli hale gelir. Bunun bir örneği, dört adet 2-VE-NOT elemanı üzerinde uygulanan "özel VEYA" eleman devresidir. Şekil 3 bir XOR devresini dört durumda göstermektedir. Bu, kullanılan 2-NAND mantık kapılarının her birindeki olası tüm mantık seviyelerini gösterir.

Bu tür elemanlar şemaya dahil edilmiştir. Bu devrede, "Özel OR" elemanı, K561LA7 mikro devrenin bir paketinde bulunan dört adet 2-VE-DEĞİL elemanından oluşur.

Fark frekanslı ayrık sinyal üreteci

Sürücü devresi Şekil 4'te gösterilmektedir. Burada, özel VEYA mantık elemanı aynı zamanda dört 2-VE-NOT elemanına da uygulanmıştır.

Tekrarlama frekansı farklı olan şekillendiricinin 1 ve 2 numaralı girişlerine dikdörtgen darbeler düşer (bkz. Grafik 1 ve 2). DD1.1-DDI.4 mantıksal öğelerini temel alan bir düğüm bu sinyalleri çoğaltır. DD1.4 elemanından gelen çıkış darbe sinyali (grafik 3), R3, C1 entegre devresine beslenir ve bu, onu giriş sinyallerinin frekansları arasındaki farka eşit bir frekansa sahip bir üçgen sinyale (grafik 4) dönüştürür ve op -amp DA1 alınan sinyali kare dalgaya dönüştürür (bkz. program 5). Direnç R1, çıkış sinyalinin pozitif ve negatif yarım dalgalarının süresini düzenler. Çok ilginç bir şema. Radyo tasarımcısının düşünecek bir şeyi var. Örneğin üçüncü grafikte gösterilen sinyal sinüs dalgası PWM sinyalidir.
Elbette “özel OR” unsurlarının kullanım alanı çok daha geniştir. Burada radyo amatörleri için daha ilgi çekici olanı sundum.

Bu yazımızda bazı bit işlemlerinden bahsedeceğiz. Başlıcalarına bakalım: XOR (özel OR), AND, NOT ve OR.

Bilindiği üzere bilginin asgari ölçü birimi biraz, 2 değerden birini saklayan: 0 ( YANLIŞ, yanlış) veya 1 ( Doğru, doğru). Bu nedenle bir bit hücresi aynı anda yalnızca iki olası durumdan birinde olabilir.

Bitleri işlemek için belirli işlemler kullanılır - mantıksal veya boolean. Değerinin sıfır veya bir olmasına bakılmaksızın herhangi bir bit'e uygulanabilirler. Peki, üç temel mantıksal işlemin kullanımına ilişkin örneklere bakalım.

Mantıksal işlem VE (ve)

VE& ile gösterilir.

AND operatörü 2 bit üzerinde gerçekleştirilir, örneğin a ve b'yi ele alalım. a ve b 1'e eşitse AND işleminin sonucu 1'dir. Aksi halde sonuç 0'dır. Örneğin AND kullanarak bir sayının çift olup olmadığını öğrenebilirsiniz.

AND işleminin doğruluk tablosuna bakın:

Mantıksal işlem VEYA (VEYA)

| tarafından belirtilmiştir .

Şebeke VEYA ayrıca 2 bit (a ve b) ile yapılır. a ve b 0 ise sonuç 0, aksi halde 1 olur. Doğruluk tablosuna bakın.

Mantıksal işlem XOR (özel OR)

XOR operatörü ^ ile gösterilir.

XOR 2 bit (a ve b) ile gerçekleştirilir. XOR işleminin sonucu ( özel veya b veya a bitlerinden biri 1 olduğunda ) 1'dir. Aksi takdirde, XOR operatörünün uygulanmasının sonucu 0 olur.

XOR (özel OR) için mantıksal işlem doğruluk tablosu şuna benzer:

XOR (exclusive OR) kullanarak aynı veri tipindeki 2 değişkenin değerlerini geçici bir değişken kullanmadan değiştirebilirsiniz. Metni XOR kullanarak da şifreleyebilirsiniz, örneğin:

String msg = "Bu bir mesajdır"; char mesajı = msg.toCharArray(); Dize anahtarı = ".*)"; String şifreliString = new String(); for(int i = 0; i< message.length; i++){ encryptedString += message[i]^key.toCharArray(); }

XOR'un en güvenilir şifreleme yönteminden uzak olduğuna katılıyorum ancak bu, onun herhangi bir şifreleme algoritmasının parçası yapılamayacağı anlamına gelmez.

Mantıksal işlem DEĞİL (DEĞİL)

Bu bit düzeyinde bir olumsuzlamadır, dolayısıyla bir bit ile gerçekleştirilir ve ~ ile gösterilir.

Sonuç bitin durumuna bağlıdır. Sıfır durumdaysa, işlemin sonucu birdir ve bunun tersi de geçerlidir. Her şey son derece basit.

İlk önce bu 4 mantıksal işlemin hatırlanması gerekir, çünkü onların yardımıyla neredeyse mümkün olan her sonucu elde edebilirsiniz. gibi operasyonlar da var.<< (побитовый сдвиг влево) и >> (bit düzeyinde sağa kaydırma).

Assembly dilindeki XOR komutu, iki işlenenin tüm bitleri arasında özel bir VEYA işlemi gerçekleştirir. XOR işleminin sonucu ilk işlenene yazılır. Sözdizimi:

XOR ALICI, KAYNAK

XOR komutu her zaman CF ve OF'yi sıfırlar ve ayrıca (sonuca bağlı olarak) SF, ZF ve PF bayraklarını da değiştirir. AF bayrağının değeri herhangi bir şey olabilir; işlemin sonucuna bağlı değildir.

ALICI aşağıdakilerden biri olabilir:

  • Bellek alanı (MEM)

KAYNAK aşağıdakilerden biri olabilir:

  • Bellek alanı (MEM)
  • Genel amaçlı kayıt (REG)
  • Anlık değer - sabit (IMM)

Yukarıda açıklanan sınırlamalara tabi olarak, ALICI-KAYNAK kombinasyonları aşağıdaki gibi olabilir:

REG, MEM MEM, REG REG, REG MEM, IMM REG, IMM

Özel VEYA işlemi

Özel bir VEYA işlemi gerçekleştirirken, karşılaştırılan bitler farklıysa (eşit değilse) sonuç değeri 1 olacaktır. Karşılaştırılan bitler aynı değere sahipse sonuç 0 olacaktır.

Bu nedenle bu işleme özel denir. Aynı bitleri karşılaştırmanın dışında bırakır ve işlemi eşit olmayan bitler üzerinde gerçekleştirir.

Ancak herhangi bir eşit olmayan bit çifti 0 ve 1 olduğundan, mantıksal VEYA işlemi 1 ile sonuçlanacaktır.

Özel VEYA doğruluk tablosu

XOR doğruluk tablosu aşağıda verilmiştir:

0 XOR 0 = 0 0 XOR 1 = 1 1 XOR 0 = 1 1 XOR 1 = 0

XOR işleminin özellikleri

XOR işlemi tersinirlik özelliğine sahiptir. Aynı işlenenle iki kez yürütülürse sonuç değeri ters çevrilir. Yani bu işlemi bitler arasında iki kez yaparsanız X Ve e, o zaman nihai sonuçta orijinal bit değerini alacağız X.

0 XOR 0 = 0 XOR 0 = 0 0 XOR 1 = 1XOR 1 = 0 1 XOR 0 = 1XOR 0 = 1 1 XOR 1 = 0 XOR 1 = 1

Bu özellik, örneğin basit veri şifreleme için kullanılabilir (bu konuda daha fazla bilgi başka zaman).

XOR işleminden sonra eşlik bayrağının kontrol edilmesi

XOR komutu 8-, 16- ve 32-bit işlemlerle çalışır.

Bazen bir işlem gerçekleştirdikten sonra, eşlik bayrağını (PF) kaç bitin (çift veya tek) içerdiğini bulmak için kontrol etme ihtiyacı ortaya çıkar. düşük bayt sonuç (bu yalnızca bir XOR işlemi gerçekleştirirken değil, aynı zamanda diğer aritmetik ve mantıksal işlemleri gerçekleştirirken de gereklidir).

Eşlik bayrağı ayarlandığında sonuç bir bitlik çift sayı olur. Aksi takdirde bayrak sıfırlanacaktır.

Ayrıca sonucun değerini değiştirmeden herhangi bir sayının paritesini kontrol edebilirsiniz. Bunu yapmak için XOR komutunu sıfır değerle çalıştırmanız gerekir. Yani ALICI test edilen sayıyı içermeli ve KAYNAK sıfır içermelidir. Daha sonra parite bayrağını kontrol etmeniz gerekiyor. Örnek:

AL, 10110101b ;AL'ye tek bitlik bir sayı (5) yerleştir çift;bir bit sayısıyla (6) XOR AL, 0;Bu durumda eşlik bayrağı PF ;ayarlanacaktır (PE)

Hata ayıklayıcılarda, PE (Eşlik Çift) kısaltması genellikle sonuçtaki çift sayıda olanı belirtmek için kullanılır ve tek sayı için PO (Eşlik Tek) kısaltması kullanılır.

16 bitlik sözcüklerde eşlik

Daha önce de belirtildiği gibi, eşlik bayrağı, sonucun düşük baytında bulunanların sayısına bağlı olarak ayarlanır. 16 bitlik bir işlenenin eşliğini kontrol etmek için sayının yüksek ve düşük baytını XOR'lamanız gerekir:

MOV AX, 64C1h ;0110 0100 1100 0001 - 6 bir bit XOR AH, AL ;Parite bayrağı ayarlanacak

Bu basit şekilde, 16 bitlik işlenen iki bayta bölünür (8 bitlik 2 grup) ve XOR komutu yürütülürken, iki 8 bitlik işlenenin karşılık gelen bitlerinde bulunan bir bit dikkate alınmayacaktır. hesap. Çünkü sonucun karşılık gelen biti sıfırdır.

XOR komutu, sonuçtan iki 8 bitlik işlenenin çakışan bir bitini çıkarır ve sonuca ayrık bir bit ekler. Yani aldığımız 8 bitlik sayının paritesi, orijinal 16 bitlik sayının paritesi ile aynı olacaktır.

0110 0100 1100 0001 - orijinal 16 bitlik sayı 0 XOR 1 = 1 1 XOR 1 = 0 1 XOR 0 = 1 0 XOR 0 = 0 0 XOR 0 = 0 1 XOR 0 = 1 0 XOR 0 = 0 0 XOR 1 = 1

Sonuç 4 birimdir, yani PF bayrağı ayarlanacak

32 bitlik çift sözcüklerde eşlik

Peki ya 32 bitlik bir sayının paritesini belirlemeniz gerekiyorsa?

Daha sonra sayı dört bayta bölünür ve bu baytlar üzerinde tek tek özel VEYA işlemi gerçekleştirilir.

Örneğin 32 bitlik bir sayıyı böldük B dört bayta kadar B0, B1, B2, B3, Nerede B0- bu düşük bayttır.

Daha sonra B sayısının paritesini belirlemek için aşağıdaki formülü kullanmamız gerekecek:

B0 XOR B1 XOR B2 XOR B3

Ancak montajcıda böyle bir gösterime izin verilmez. O yüzden biraz düşünmeniz gerekecek.

Ve son olarak anımsatıcıların kökeni hakkında XOR. İngilizce'de e kelimesi var X resepsiyon - istisna. Bu kelimenin kısaltması harftir X(böyle oldu). Bunu muhtemelen reklamlarda veya üreticilerinin ayrıcalık iddia ettiği (veya iddia ettiğini düşündüğü) ürünlerin adlarında görmüşsünüzdür. Örneğin Lada XRAY, Sony XPeria vb. Yani XOR iki kelimeden oluşan bir kısaltmadır - e X resepsiyon VEYA- özel veya.

Fok
Konunun devamı:
Cihazlar

Lviv Ulusal Üniversitesi adını almıştır. I. Franko (LNU) - yüksek öğrenim kurumu hakkında ek bilgi Genel bilgi Ivan'ın adını taşıyan Lviv Ulusal Üniversitesi...