زبان گو مثل سایر زبانها دارای یکسری عملگرها مانند: عملگرهای حسابی, عملگرهای مقایسهای, عملگرهای منطقی و عملگرهای بیتی است.
1.4.1 عملگرهای حسابی #
زبان گو دارای ۵ تا عملگر حسابی است که به ترتیب:
عملگر | نام |
---|---|
+ | جمع |
- | تفریق |
* | ضرب |
/ | تقسیم |
% | باقی مانده |
این ۵ تا عملگر اغلب به ترتیب مجموع, تفاوت, حاصلضرب و ضریب نیز نامیده میشوند.
a := 1
b := 2
c := a + b // 3
d := a - b // -1
e := a * b // 2
f := a / b // 0
g := a % b // 1
در نمونه کد بالا ما از عملگر :=
که شیوه تعریف متغیر به روش کوتاه است استفاده کردیم که در بخش 1.5 متغیرها و ثابت ها معرفی خواهیم کرد.
1.4.2 عملگرهای مقایسهای #
زبان گو دارای ۶ عملگر مقایسهای است که به ترتیب:
عملگر | نام |
---|---|
== | مساوی بودن |
=! | مساوی نبودن با |
> | کوچکتر از |
=> | کوچکتر یا مساوی |
< | بزرگتر |
=< | بزرگتر یا مساوی |
نتیجه استفاده از این عملگرهای مقایسهای, یک نوع untyped بولین است. یعنی حاصل این مقایسهها در واقع true یا false است.
a := 1
b := 2
c := 1
println(a == b) // false
println(a == c) // true
println(a < b) // true
println(b > c) // true
println(c <= a) // true
println(c >= b) // false
println(b != a) // true
println(c != a) // false
1.4.3 عملگرهای منطقی #
زبان گو دارای ۳ نوع عملگر منطقی است که به ترتیب:
عملگر | نام |
---|---|
&& | AND |
|| | OR |
! | NOT |
- عملگر && به انگلیسی AND به فارسی و , اگر هردو عملگر true باشد مقدار بازگشتی true و در غیر اینصورت false خواهد بود.
- عملگر || به انگلیسی OR به فارسی یا , اگر یکی از عملگرها true باشد مقدار بازگشتی true در غیر این صورت false خواهد بود.
- عملگر ! به انگلیسی NOT به فارسی منفی یا نفی , زمانیکه شما از عملگر ! استفاده می کنید معکوس نتیجه عملوند را نیاز دارید.
a := true
b := true
c := false
fmt.Println(a && b) //true
fmt.Println(a || b) //true
fmt.Println(!a) //false
fmt.Println(!c) //true
مثال زیر نتیجه مقادیر متفاوت و عملگرهای منطقی را نشان میدهد.
// x y x && y x || y !x !y
true true true true false false
true false false true false true
false true false true true false
false false false false true true
1.4.4 عملگرهای بیتی #
زبان گو داری 5 عملگر بیتی است که به ترتیب:
عملگر | نام |
---|---|
<< | شیفت بیتی به چپ |
>> | شیفت بیتی به راست |
& | AND |
| | OR |
^ | XOR |
- عملگر
<<
به انگلیسی Zero fill left shift یا به اختصار left shift که به فارسی اسم مناسبی نیافتیم به نقل از ویکی پدیا شیفت بیتی به چپ, مقدار باینری ما را با استفاده از انتقال یا اضافه کردن صفرها به سمت چپ انتقال میدهد. - عملگر
>>
به انگلیسی Zero fill right shift یا به اختصار right shift که به فارسی اسم مناسبی نیافتیم به نقل از ویکی پدیا شیفت بیتی به راست, مقدار باینری ما را با به سمت راست انتقال میدهد.
در زیر دو مثال رو مشاهده میکنید که از این دو عملگر استفاده شده:
//example 1
a := 0b01000101
b := a << 1
c := a >> 1
fmt.Printf("binary:%08b,value:%v", a, a) //binary:01000101,value:69
fmt.Println("")
fmt.Printf("binary:%08b,value:%v", b, b) //binary:10001010,value:138
fmt.Println("")
fmt.Printf("binary:%08b,value:%v", c, c) //binary:00100010,value:34
fmt.Println("\n\n---------------\n")
//example 2
d := 0b01010101
e := d << 3
f := d >> 3
fmt.Printf("binary:%08b,value:%v", d, d) //binary:01010101,value:85
fmt.Println("")
fmt.Printf("binary:%08b,value:%v", e, e) //binary:1010101000,value:680
fmt.Println("")
fmt.Printf("binary:%08b,value:%v", f, f) //binary:00001010,value:10
fmt.Println("")
*/
در مثال دو همانطور که مشاهده کردید زمانی که از عملگر >>
استفاده کردید در صورتی که اولین خانه باینری از سمت چپ مقدار 1 داشته باشد مابقی مقدار به صورت 0 به باینری اضافه میشود و در غیر این صورت 1 ها به همان مقدار به سمت چپ خواهد رفت.
در واقع 08b%
یک شناساگر قالب (format specifier) برای نمایش باینری در هشت خانه است در اینجا میتوانید بیشتر راجب شناساگرهای قالب بخوانید.
- عملگر
&
به انگلیسی AND به فارسی و دو مقدار باینری رو با یک دیگر مقایسه و اگر هر بیت مقدار 1 در هر دو طرف داشته باشد آن را 1 نگه میدارد و در غیر اینصورت آن بیت را 0 میکند. - عملگر
|
به انگلیسی OR به فارسی یا دو مقدار باینری رو با یک دیگر مقایسه و اگر هر بیت مقدار 1 در یک طرف یا هر دوطرف داشته باشد آن را 1 نگه میدارد و در غیر اینصورت آن بیت را 0 میکند.
عملگر ^
به انگلیسی XOR به فارسی نامی ندارد دو مقدار باینری رو با یک دیگر مقایسه و اگر هر بیت مقدار 1 در هر دوطرف داشته باشد آن را 0 میکند.
//& operator example
a := 0b01000101
b := 0b01010100
c := a & b
fmt.Printf("binary:%08b,value:%v", a, a) //binary:01000101,value:69
fmt.Println("")
fmt.Printf("binary:%08b,value:%v", b, b) //binary:01010100,value:84
fmt.Println("")
fmt.Printf("binary:%08b,value:%v", c, c) //binary:01000100,value:68
fmt.Println("\n\n---------------\n")
//| operator example
d := 0b01000101
e := 0b01010100
f := d | e
fmt.Printf("binary:%08b,value:%v", d, d) //binary:01000101,value:69
fmt.Println("")
fmt.Printf("binary:%08b,value:%v", e, e) //binary:01010100,value:84
fmt.Println("")
fmt.Printf("binary:%08b,value:%v", f, f) //binary:01010101,value:85
fmt.Println("\n\n---------------\n")
//^ operator example
g := 0b01000101
h := 0b01010100
i := a ^ b
fmt.Printf("binary:%08b,value:%v", g, g) //binary:01000101,value:69
fmt.Println("")
fmt.Printf("binary:%08b,value:%v", h, h) //binary:01010100,value:84
fmt.Println("")
fmt.Printf("binary:%08b,value:%v", i, i) //binary:00010001,value:17
1.4.5 اولویت عملگرها #
در زبان گو یکسری اولویتها برای عملگرها وجود دارد و همچنین در زبان گو مثل سایر زبانها پرانتز ()
ترویج دهنده اولویتها است.
* / % << >> & &^
+ - | ^
== != < <= > >=
&&
||
توجه در زبان گو اولویت<<
و>>
بیشتر از + و - است.