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  ||
توجه در زبان گو اولویت << و >> بیشتر از + و - می باشد.