اختبارات

معامل 3

ماذا يطبع البرنامج التالي؟


package main

const N = 1
var n = N
var a byte = 128 << N >> N
var b byte = 128 << n >> n

func main() {
	println(a, b)
}

الخيارات:

  • 128 128
  • 128 0
  • 0 128
  • 0 0

الإجابة: 128 0

شغِّله على Go play.

النقاط الأساسية:

  • إذا كانت المعامَلات بها في تعبير معامل كلها ثوابت، فإن التعبير يُقيَّم في وقت التصريف. وفي البرنامج أعلاه، 128 << N >> N تعبير من هذا القبيل. وفي هذا التعبير، يُستنتج أن 128 قيمة int غير مُنمَّطة.
  • في تعبير الإزاحة البتية، إذا كان المعامَل به الأيسر ثابتًا غير مُنمَّط وكان المعامَل به الأيمن غير ثابت، فإن نوع المعامَل به الأيسر سيُستنتج على أنه النوع المفترض النهائي. وفي البرنامج أعلاه، 128 << n >> n تعبير من هذا القبيل. وفي هذا التعبير، يُستنتج أن نوع 128 هو النوع المفترض، byte. ويتجاوز 128 << n نطاق قيم byte، فيُقتطع إلى 0.

هذا تفصيل صغير واحد في برمجة Go. هل تهتم بمعرفة المزيد منها؟ يُرجى قراءة كتاب Go Details & Tips 101.