ماذا يطبع البرنامج التالي؟
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.