عاملا << و >> في Go: الإزاحات الثنائية لليسار واليمين
مرحبًا بالجميع! لقد بدأت للتو في تعلم Go وصادفت العاملين `<<` و `>>`. في التوثيق مكتوب أنهما عاملا إزاحة، لكنني لا أفهم تمامًا كيف يعملان عمليًا.
إليك مثال على الكود الذي كتبته:
```go
package main
import "fmt"
func main() {
x := 4
y := x << 2
z := x >> 1
fmt.Println(y, z) // الإخراج: 16 2
}
```
كنت أتوقع أن `x << 2` سيعطي 8 (4 * 2)، و `x >> 1` سيعطي 2 (4 / 2). النتيجة 16 و 2 أربكتني. لماذا أعطت الإزاحة لليسار بمقدار 2 عملية ضرب في 4 وليس في 2؟ وماذا يعني هذان العاملان أساسًا؟
أيضًا، رأيت استخدام `<<` في سياق `1 << iota` عند تعريف الثوابت. هل يمكنك شرح كيف يعمل هذا؟ حاولت فهم العمليات الثنائية لكني أرتبك في النظام الثنائي. سأكون ممتنًا لشرح مفصل مع أمثلة، ويفضل بالروسية لأنني لا أفهم المقالات الإنجليزية تمامًا.