English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
يقدم Kotlin عدة وظائف (بصيغة infix) لتنفيذ العمليات bitwise و العمليات الديسيملة. في هذا المقال، ستتعلم كيفية تنفيذ العمليات bitwise في Kotlin باستخدام الأمثلة.
يستخدم علامات التباين bitwise و عمليات الديسيملة فقط على أنواع البيانات الصحيحة (Int و Long) لتنفيذ العمليات على المستوى اللوحي.
لتنفيذ هذه العمليات، يقدم Kotlin 7 وظائف باستخدام الرمز المدمج.
وظيفة أو bitwise تقارن بين المواضع المماثلة لقيمين. إذا كان أي موضع من المواضع المماثلة يساوي 1، فإن النتيجة تكون 1. وإلا تكون 0. على سبيل المثال،
12 = 00001100 (الرقم الثنائي) 25 = 00011001 (الرقم الثنائي) عمليات أو bitwise بين 12 و 25 00001100 or 00011001 ________ 00011101 = 29 (decimal)
fun main(args: Array<String>) { val number1 = 12 val number2 = 25 val result: Int result = number1 or number2 // result = number1.or(number2) println(result) }
عند تشغيل هذا البرنامج، الناتج هو:
29
تقارن وظيفة and القيم المتبادلة. إذا كانت القيم المتبادلة كلاهما 1، فإن القيمة هي 1. إذا كان أي من القيم المتبادلة 0، فإن القيمة هي 0. على سبيل المثال،
12 = 00001100 (الرقم الثنائي) 25 = 00011001 (الرقم الثنائي) عمليات التغيير الثنائي لعدد 12 و 25 00001100 and 00011001 ________ 00001000 = 8 (الرقم العشري)
fun main(args: Array<String>) { val number1 = 12 val number2 = 25 val result: Int result = number1 and number2 // result = number1.and(number2) println(result) }
عند تشغيل هذا البرنامج، الناتج هو:
8
تقارن وظيفة xor القيم المتبادلة. إذا كانت القيم المتبادلة مختلفة، فإن القيمة هي 1. إذا كانت القيم المتبادلة متطابقة، فإن القيمة هي 0. على سبيل المثال،
12 = 00001100 (الرقم الثنائي) 25 = 00011001 (الرقم الثنائي) عمليات التغيير الثنائي لعدد 12 و 25 00001100 xor 00011001 ________ 00010101 = 21 (الرقم العشري)
fun main(args: Array<String>) { val number1 = 12 val number2 = 25 val result: Int result = number1 xor number2 // result = number1.xor(number2) println(result) }
عند تشغيل هذا البرنامج، الناتج هو:
21
وظيفة inv() تقوم بالتغيير الثنائي. إنها تجعل كل 0 إلى 1، وكل 1 إلى 0.
35 = 00100011 (الرقم الثنائي) عمليات التعويض الثنائي لعدد 35 00100011 ________ 11011100 = 220 (الرقم العشري)
fun main(args: Array<String>) { val number = 35 val result: Int result = number.inv() println(result) }
عند تشغيل هذا البرنامج، الناتج هو:
-36
لماذا نريد طباعة -36 بديلاً عن 220?
هذا لأن المبرمج عرض ثنائية التعويض الخاصة بالعدد. علامة السلب في العدد الثنائي.
لأي عدد صحيح صغير n، ستكون ثنائية n - (n + 1).
Decimal Binary 2's complement --------- --------- --------------------------------------- 0 00000000 -(11111111+1) = -00000000 = -0(الرقم العشري) 1 00000001 -(11111110+1) = -11111111 = -256(عشري) 12 00001100 -(11110011+1) = -11110100 = -244(عشري) 220 11011100 -(00100011+1) = -00100100 = -36(عشري) ملاحظة: تُتجاهلُ الزيادةُ عند حساب مضاد الكسر
مضاد الكسرُ للعدد 35 هو 220 (عشري). مضاد الكسرُ للعدد 220 هو -36. لذلك، النتيجةُ هي -36 而非 220.
دالة shl تتحركُ نمطُ البتات إلى اليسار بعددٍ معينٍ من البتات، وتبدأُ البتاتُ بالصفر
212 (ثنائي: 11010100) 212 shl 1 يعادله 424 (ثنائي: 110101000) 212 shl 0 يعادله 212 (ثنائي: 11010100) 212 shl 4 يعادله 3392 (ثنائي: 110101000000)
fun main(args: Array<String>) { val number = 212 println(number shl 1) println(number shl 0) println(number shl 4) }
عند تشغيل هذا البرنامج، الناتج هو:
424 212 3392
دالة shr تتحركُ نمطُ البتات إلى اليمين بعددٍ معينٍ من البتات
212 (ثنائي: 11010100) 212 shr 1 يُحسب بأنه 106 (ثنائي: 01101010) 212 shr 0 يُحسب بأنه 212 (ثنائي: 11010100) 212 shr 8 يُحسب بأنه 0 (ثنائي: 00000000)
إذا كان العددُ هو مضاد الكسر، فسيتمُ تحريك علامة النهاية إلى الوضع الأعلى
fun main(args: Array<String>) { val number = 212 println(number shr 1) println(number shr 0) println(number shr 8) }
عندما تقومُ بتنفيذ البرنامج، النتيجةُ ستكون:
106 212 0
دالة ushr تضيف الصفر إلى أعلى الوضع
fun main(args: Array<String>) { val number1 = 5 val number2 = -5 // تدوير المتبقي println(number1 shr 1) // تدوير غير المتبقي println(number1 ushr 1) // تدوير المتبقي println(number2 shr 1) // تدوير غير المتبقي println(number2 ushr 1) }
عند تشغيل هذا البرنامج، الناتج هو:
2 2 -3 2147483645
للتباين، يعمل دالة التدوير الأيمن المتبقي ودالة التدوير الأيمن المتبقي بشكل مختلف.
العدد 2147483645 هو المتبقي من 2 هو 3.