المقدمة: لم أكتب مدونة لفترة طويلة. أشعر بالانشغال الشديد في العام الماضي ، ولدي عمل لا نهاية له لأفعله. أعتقد أن العديد من عمال المكاتب سيشعرون بهذه الطريقة. في الآونة الأخيرة ، قمت بإجراء عملية كتابة لبطاقات على NFC وأحتاج إلى حساب بت الشيك. بشكل عام ، يتم الحصول على معظم أجزاء الفحص عن طريق تشغيل XOR للبايت القليلة الأولى.
الآن اسمحوا لي أن أتحدث عن السيناريوهات التي أستخدمها:
اكتب بيانات 16 بايت في بطاقة وحدة المعالجة المركزية (مثل بطاقة حركة المرور) ، والبايت الأخير هو رمز التحقق-أول خمسة عشر بايت XOR.
بدأت أبحث عن بعض الخوارزميات التي كتبها الآخرون على الإنترنت ووجدت أن نتيجة الحساب كانت خاطئة ، أو كانت الكتابة معقدة للغاية ، لذلك كتبت بنفسي ، والتي شعرت أنها كانت بسيطة نسبيًا. الآن سأشاركها معك ، آمل أن أتواصل معك معًا.
القسم 1: ما هي عملية XOR (المقتطف بشكل أساسي من موسوعة Baidu ، يمكن تخطي أحذية الأطفال المألوفة)
تعريف:
حصري ، اللغة الإنجليزية هي حصرية ، أو اختصار كـ XOR
XOR هو عامل رياضي. يتم تطبيقه على العمليات المنطقية. الرمز الرياضي لـ XOR هو "" ، ورمز الكمبيوتر هو "Xor". الخوارزمية هي:
AB = (¬a∧b) ∨ (a∧¬b)
إذا لم تكن القيم A و B هي نفسها ، فإن نتيجة XOR هي 1. إذا كانت القيم A و B هي نفسها ، فإن نتيجة XOR هي 0.
حصريًا أو يسمى أيضًا تشغيل نصف الإضافة. خوارزميةها تعادل الإضافة الثنائية بدون حمل: في الثنائي ، يتم استخدام 1 لتمثيل True و 0 كاذب ، ثم خوارزمية الحصرية أو هي: 00 = 0 ، 10 = 1 ، 01 = 1 ، 11 = 0 (كلاهما كلاهما 0 ، مختلف 1). هذه القوانين هي نفسها الإضافة ، ولكن لا تحمل.
يشار إلى XOR باسم XOR ، EOR ، و ex-or
هناك ثلاثة أنواع من المشغلين في البرنامج: Xor و Xor و.
كيفية استخدامه على النحو التالي
z = xy
z = xxory
قواعد العملية:
1.AA = 0
2.ab = با
3.abc = a (bc) = (ab) c ؛
4.d = ABC يمكن أن تستنتج A = DBC.
5.aba = ب.
6. إذا كان x هو الرقم الثنائي 0101 ، y هو الرقم الثنائي 1011
ثم xy = 1110
فقط عندما تختلف بت المقارنة ، تكون النتيجة 1 ، وإلا فإن النتيجة هي 0
هذا هو ، "عندما يكون هناك مدخلان متماثلان ، يكونان 0 ، وعندما يختلفان ، يكونان 1"!
منطق:
تعبير منطقي: f = ab'a'b ((ab'a'b) '= ab⊙a'b' ، ⊙ هو "نفس أو" العملية)
يظهر جدول الحقيقة لمنطق XOR في الشكل 1
يتم عرض الرموز المنطقية في الشكل 2. العلاقة بين منطق XOR هي: عندما يكون AB مختلفًا ، فإن الإخراج P = 1 ؛ عندما يكون AB هو نفسه ، الإخراج p = 0. "" هو رمز تشغيل XOR ، ومنطق XOR هو أيضًا مزيج مع أو غير لوغالي ، وتعبيره المنطقي هو:
P = AB
من الشكل 1 ، قواعد عملية XOR
00 = 0،01 = 1
10 = 1،11 = 0
الصيغة الذهنية: 0 هي نفسها ، 1 هو نفسه
في الواقع ، يتم تعريف Xor باللغة الإنجليزية على أنه (Isone) ، ولكن ليس ، أي عندما يكون واحد فقط صحيح (1) ، خذ (1).
تأثير:
ويستخدم عادة في أجهزة الكمبيوتر. يتم استخدام الرمز المنطقي لـ XOR بشكل عام مع XOR ، وهو مفيد أيضًا:
صواب أو خطأ = صحيح
خطأ صحيح = صحيح
خطأ = خطأ
صحيح = خطأ
أو:
truefalse = صحيح
falsetrue = صحيح
falsefalse = false
truetrue = خطأ
تستخدم بعض لغات الكمبيوتر 1 لتمثيل True و 0 لتمثيل False ، وبالتالي فإن البايتين حصريين أو على النحو التالي
فيما يلي قيمتان ثنائيتان لحساب XOR:
في الواقع ، يتم استخدام القيم العشرية ، لذلك دعونا نلقي نظرة على كيفية حساب قيمتين عشريتين لـ XOR:
52 =؟
1. قبل إجراء حساب XOR ، سيتم تحويل جميع القيم إلى ثنائي:
يتم تحويل 5 و 2 إلى ثنائي: 0101 و 0010 على التوالي
2. تحويل النتيجة 0111 إلى عشري: 7
3. هكذا 52 = 7
الاستخدام الذكي:
على عكس اللغات الأخرى ، لا يستخدم XOR في C و C ++ XOR ، ولكن "^" ، وطريقة الكتابة هي Shift+6. (و "^" بلغات أخرى تعني عمومًا مضاعفة)
إذا كنت بحاجة إلى تبادل قيم متغيرين ، بالإضافة إلى المتغيرات الوسيطة المستعارة شائعة الاستخدام للتبادل ، يمكنك أيضًا استخدام XOR واستخدام متغيرين فقط للتبادل ، مثل:
a = a^b ؛ b = b^a ؛ a = a^b ؛
شرح مفصل:
a1 = a^bb = a1^ba = a1^b = a1^(a1^b) = a1^a1^b = b
يلاحظ:
a=a^b^(b=a);//此类形式是不正确的UB行为,在不同编译器中会有不同的结果,切勿使用
هذا يكمل تبادل أ و ب.
لتلخيص: نفس المتغير ومتغير آخر وقيمة XOR الخاصة به تساوي نفسه.
استخدام الحالة: يمكن استخدامه في رابط معين أو المزيد من روابط خوارزمية التشفير ، مما يجعل الخوارزمية أكثر تعقيدًا ، وأقل سهولة في تصدعها ، ولديها أمان أعلى. [1]
القسم 2: التنفيذ بلغة جافا:
سلسلة ثابتة خاصة XOR (String strhex_x ، String strhex_y) {// تحويل x و y إلى سلسلة نموذج ثنائية أخرى = integer.tobinaryString (integer.valueof (strhex_x ، 16)) ؛ ثنائيًا ، وإلا فإن الصفر الأيسر يستكمل إذا (otherbinary.length ()!! = 8) {for (int i = otherbinary.length () ؛ i <8 ؛ "0"+thisbinary ؛}} // xor عملية (int i = 0 ؛ i <otherbinary.length () ؛ i ++) {// إذا كان رقم الموضع نفسه هو نفسه ، أضف 0 ، وإلا أضف 1 if (thisbinary.charat (i) == onebinaribinary.charat (i)). else {result+= "1" ؛}} log.e ("code" ، result) ؛ return integer.toHexString (integer.parseint (result ، 2)) ؛}ملاحظة: الطريقة أعلاه هي عملية XOR بين بايت واحد لسلسلة سداسية عشرية ، مثل عملية XOR لسلسلة سداسية عشرة بايت:
1312F70F900168D900007DF57B4884
الانقسام أولاً: 13 12 F7 0f 90 01 68 D9 00 00 7d F5 7B 48 84
13 XOR 12-> 1
1 XOR F7-> F6
F6 XOR 0F-> F9
....
62 XOR 84-> E6
وهذا هو ، رمز التحقق واحد بايت هو: E6
بالإضافة إلى ذلك ، أضفت طريقة مكالمة بسيطة إلى بعض الأصدقاء للرجوع إليها فقط:
السلسلة العامة checkcode_0007 (سلسلة para) {string [] datearr = new string [15] ؛ جرب {datearr [0] = para.substring (0 ، 2) ؛ datearr [1] = para.substring (2 ، 4) ؛ datearr [2] = para.substring (4 ، 6) ؛ para.substring (8 ، 10) ؛ datearr [5] = para.substring (10 ، 12) ؛ datearr [6] = para.substring (12 ، 14) ؛ datearr [7] = para.substring (14 ، 16) ؛ datearr [8] = para.substring (16 ، 18) 20) ؛ datearr [10] = para.substring (20 ، 22) ؛ datearr [11] = para.substring (22 ، 24) ؛ datearr [12] = para.substring (24 ، 26) ؛ استثناء} سلسلة code = "" ؛ for (int i = 0 ؛ i <datearr.length-1 ؛ i ++) {if (i == 0) {code = xorstring (datearr [i] ، datearr [i+1]) ؛} آخر {code = xorstring (رمز datearr [i]) ؛}}ثم نسميها في الوظيفة الرئيسية أو طريقة أخرى:
رمز السلسلة = CheckCode_0007 ("1312F70F900168D900007DF57B4884") ؛الرمز هو رمز الشيك الذي تم الحصول عليه.
لخص
ما سبق هو المحتوى الكامل لهذه المقالة حول تنفيذ برمجة Java لمثال الكود للحصرية أو تشغيل السلاسل السداسية. آمل أن يكون ذلك مفيدًا للجميع. يمكن للأصدقاء المهتمين الاستمرار في الرجوع إلى الموضوعات الأخرى ذات الصلة على هذا الموقع. إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة لإشارةها. شكرا لك يا أصدقائك لدعمكم لهذا الموقع!