1.4 عملگرها

1.4 عملگرها

زبان گو مثل سایر زبان‌ها دارای یکسری عملگرها مانند: عملگرهای حسابی, عملگرهای مقایسه‌ای, عملگرهای منطقی و عملگرهای بیتی است.

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 اولویت عملگرها #

در زبان گو یکسری اولویت‌ها برای عملگرها وجود دارد و همچنین در زبان گو مثل سایر زبان‌ها پرانتز () ترویج دهنده اولویت‌ها است.

1  *   /   %   <<  >>  &   &^
2  +   -   |   ^
3  ==  !=  <   <=  >   >=
4  &&
5  ||
توجه در زبان گو اولویت << و >> بیشتر از + و - است.