زبان گو مثل سایر زبانها دارای یکسری عملگرها مانند: عملگرهای حسابی, عملگرهای مقایسهای, عملگرهای منطقی و عملگرهای بیتی است.
1.4.1 عملگرهای حسابی #
زبان گو دارای ۵ تا عملگر حسابی است که به ترتیب:
عملگر | نام |
---|---|
+ | جمع |
- | تفریق |
* | ضرب |
/ | تقسیم |
% | باقی مانده |
این ۵ تا عملگر اغلب به ترتیب مجموع, تفاوت, حاصلضرب و ضریب نیز نامیده میشوند.
1 a := 1
2 b := 2
3
4 c := a + b // 3
5 d := a - b // -1
6 e := a * b // 2
7 f := a / b // 0
8 g := a % b // 1
در نمونه کد بالا ما از عملگر :=
که شیوه تعریف متغیر به روش کوتاه است استفاده کردیم که در بخش 1.5 متغیرها و ثابت ها معرفی خواهیم کرد.
1.4.2 عملگرهای مقایسهای #
زبان گو دارای ۶ عملگر مقایسهای است که به ترتیب:
عملگر | نام |
---|---|
== | مساوی بودن |
=! | مساوی نبودن با |
> | کوچکتر از |
=> | کوچکتر یا مساوی |
< | بزرگتر |
=< | بزرگتر یا مساوی |
نتیجه استفاده از این عملگرهای مقایسهای, یک نوع untyped بولین است. یعنی حاصل این مقایسهها در واقع true یا false است.
1 a := 1
2 b := 2
3 c := 1
4
5 println(a == b) // false
6 println(a == c) // true
7 println(a < b) // true
8 println(b > c) // true
9 println(c <= a) // true
10 println(c >= b) // false
11 println(b != a) // true
12 println(c != a) // false
1.4.3 عملگرهای منطقی #
زبان گو دارای ۳ نوع عملگر منطقی است که به ترتیب:
عملگر | نام |
---|---|
&& | AND |
|| | OR |
! | NOT |
- عملگر && به انگلیسی AND به فارسی و , اگر هردو عملگر true باشد مقدار بازگشتی true و در غیر اینصورت false خواهد بود.
- عملگر || به انگلیسی OR به فارسی یا , اگر یکی از عملگرها true باشد مقدار بازگشتی true در غیر این صورت false خواهد بود.
- عملگر ! به انگلیسی NOT به فارسی منفی یا نفی , زمانیکه شما از عملگر ! استفاده می کنید معکوس نتیجه عملوند را نیاز دارید.
1a := true
2b := true
3c := false
4
5fmt.Println(a && b) //true
6fmt.Println(a || b) //true
7fmt.Println(!a) //false
8fmt.Println(!c) //true
مثال زیر نتیجه مقادیر متفاوت و عملگرهای منطقی را نشان میدهد.
1 // x y x && y x || y !x !y
2 true true true true false false
3 true false false true false true
4 false true false true true false
5 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 که به فارسی اسم مناسبی نیافتیم به نقل از ویکی پدیا شیفت بیتی به راست, مقدار باینری ما را با به سمت راست انتقال میدهد.
در زیر دو مثال رو مشاهده میکنید که از این دو عملگر استفاده شده:
1//example 1
2a := 0b01000101
3b := a << 1
4c := a >> 1
5fmt.Printf("binary:%08b,value:%v", a, a) //binary:01000101,value:69
6fmt.Println("")
7fmt.Printf("binary:%08b,value:%v", b, b) //binary:10001010,value:138
8fmt.Println("")
9fmt.Printf("binary:%08b,value:%v", c, c) //binary:00100010,value:34
10
11fmt.Println("\n\n---------------\n")
12//example 2
13d := 0b01010101
14e := d << 3
15f := d >> 3
16fmt.Printf("binary:%08b,value:%v", d, d) //binary:01010101,value:85
17fmt.Println("")
18fmt.Printf("binary:%08b,value:%v", e, e) //binary:1010101000,value:680
19fmt.Println("")
20fmt.Printf("binary:%08b,value:%v", f, f) //binary:00001010,value:10
21fmt.Println("")
22 */
در مثال دو همانطور که مشاهده کردید زمانی که از عملگر >>
استفاده کردید در صورتی که اولین خانه باینری از سمت چپ مقدار 1 داشته باشد مابقی مقدار به صورت 0 به باینری اضافه میشود و در غیر این صورت 1 ها به همان مقدار به سمت چپ خواهد رفت.
در واقع 08b%
یک شناساگر قالب (format specifier) برای نمایش باینری در هشت خانه است در اینجا میتوانید بیشتر راجب شناساگرهای قالب بخوانید.
- عملگر
&
به انگلیسی AND به فارسی و دو مقدار باینری رو با یک دیگر مقایسه و اگر هر بیت مقدار 1 در هر دو طرف داشته باشد آن را 1 نگه میدارد و در غیر اینصورت آن بیت را 0 میکند. - عملگر
|
به انگلیسی OR به فارسی یا دو مقدار باینری رو با یک دیگر مقایسه و اگر هر بیت مقدار 1 در یک طرف یا هر دوطرف داشته باشد آن را 1 نگه میدارد و در غیر اینصورت آن بیت را 0 میکند.
عملگر ^
به انگلیسی XOR به فارسی نامی ندارد دو مقدار باینری رو با یک دیگر مقایسه و اگر هر بیت مقدار 1 در هر دوطرف داشته باشد آن را 0 میکند.
1//& operator example
2a := 0b01000101
3b := 0b01010100
4c := a & b
5fmt.Printf("binary:%08b,value:%v", a, a) //binary:01000101,value:69
6fmt.Println("")
7fmt.Printf("binary:%08b,value:%v", b, b) //binary:01010100,value:84
8fmt.Println("")
9fmt.Printf("binary:%08b,value:%v", c, c) //binary:01000100,value:68
10
11fmt.Println("\n\n---------------\n")
12
13//| operator example
14d := 0b01000101
15e := 0b01010100
16f := d | e
17fmt.Printf("binary:%08b,value:%v", d, d) //binary:01000101,value:69
18fmt.Println("")
19fmt.Printf("binary:%08b,value:%v", e, e) //binary:01010100,value:84
20fmt.Println("")
21fmt.Printf("binary:%08b,value:%v", f, f) //binary:01010101,value:85
22
23fmt.Println("\n\n---------------\n")
24
25//^ operator example
26g := 0b01000101
27h := 0b01010100
28i := a ^ b
29fmt.Printf("binary:%08b,value:%v", g, g) //binary:01000101,value:69
30fmt.Println("")
31fmt.Printf("binary:%08b,value:%v", h, h) //binary:01010100,value:84
32fmt.Println("")
33fmt.Printf("binary:%08b,value:%v", i, i) //binary:00010001,value:17
1.4.5 اولویت عملگرها #
در زبان گو یکسری اولویتها برای عملگرها وجود دارد و همچنین در زبان گو مثل سایر زبانها پرانتز ()
ترویج دهنده اولویتها است.
توجه در زبان گو اولویت<<
و>>
بیشتر از + و - است.