Dart操作符

算術(shù)操作符

  • 加法(+):計(jì)算兩個(gè)操作數(shù)的和
  • 減法(-):計(jì)算兩個(gè)操作數(shù)的差
  • 乘法(*):計(jì)算兩個(gè)操作數(shù)的乘積
  • 除法 (/):計(jì)算兩個(gè)操作數(shù)的商,返回一個(gè)雙精度浮點(diǎn)數(shù)(double)
  • 整除(~/): 計(jì)算兩個(gè)操作數(shù)的商,返回一個(gè)整數(shù)(int)
  • 取模(%):計(jì)算兩個(gè)操作數(shù)的余數(shù)
void main() {
  int a = 10;
  int b = 3;

  print(a + b); // 13
  print(a - b); // 7
  print(a * b); // 30
  print(a / b); // 3.3333333333333335
  print(a ~/ b); // 3
  print(a % b); // 1
}

關(guān)系操作符

  • 等于(==):檢查兩個(gè)操作數(shù)是否相等
  • 不等于(!=): 檢查兩個(gè)操作數(shù)是否不相等
  • 大于(>): 檢查左側(cè)操作數(shù)是否大于右側(cè)操作數(shù)
  • 小于(<): 檢查左側(cè)操作數(shù)是否小于右側(cè)操作數(shù)
  • 大于等于(>=): 檢查左側(cè)操作數(shù)是否大于等于右側(cè)操作數(shù)
  • 小于等于(<=): 檢查左側(cè)操作數(shù)是否小于或等于右側(cè)操作數(shù)
void main() {
  int a = 10;
  int b = 3;
  print(a == b); // false
  print(a != b); // true
  print(a > b); // true
  print(a < b); // false
  print(a >= b); // true
  print(a <= b); // false
}

類型判斷操作符

  • 類型測(cè)試(is): 檢查對(duì)象是否是某個(gè)類型的實(shí)例
  • 非類型測(cè)試(is !): 檢查對(duì)象是否不是某個(gè)類型的實(shí)例
void main() {
  var x = 'Hello, Dart';

  print(x is String); // true
  print(x is! int); // true
}

賦值操作符

  • 簡(jiǎn)單賦值(=):將右操作數(shù)的值賦值給左操作數(shù)
  • 復(fù)合賦值(+=、-=、*=、/=、~/=、%=):進(jìn)行運(yùn)算并且將結(jié)果賦值為左操作數(shù)
void main() {
  double a = 10.0;
  a /= 4; // 相當(dāng)于 a = a / 4;
  print(a); // 輸出: 2.5
}
void main() {
  double a = 10.0;
  a /= 4; // 相當(dāng)于 a = a / 4;
  print(a); // 輸出: 2.5
}
void main() {
  int a = 10;
  a %= 4; // 相當(dāng)于 a = a % 4;
  print(a); // 輸出: 2
}

邏輯操作符

  • 邏輯與(&&):如果兩個(gè)操作數(shù)都為 true 則返回 true
  • 邏輯或(||):如果兩個(gè)操作數(shù)中至少有一個(gè)為 true,則返回 true
  • 邏輯非(!): 返回操作數(shù)的布爾值的相反值
void main() {
  bool a = true;
  bool b = false;

  print(a && b); // false
  print(a || b); // true
  print(!a); // false
}

條件操作符

  • 條件表達(dá)式(?:): 如果條件為 true 返回第一個(gè)值,否則返回第二個(gè)值
  • 如果為空(??):如果左操作數(shù)為 null ,則返回右操作數(shù)
void main() {
  int a = 10;
  int b = 5;

  var result = a > b ? 'a is greater' : 'b is greater';
  print(result); // a is greater

  String? name;
  print(name ?? 'Guest'); // Guest
}

位操作符

  • 按位與(&):對(duì)兩個(gè)操作數(shù)的每一位執(zhí)行與操作
  • 按位或(|):對(duì)兩個(gè)操作數(shù)的每一位執(zhí)行或操作
  • 按位異或(^):對(duì)兩個(gè)操作數(shù)的每一位執(zhí)行異或操作
  • 按位取反 (~): 對(duì)操作數(shù)的每一位執(zhí)行取反操作。
  • 左移 (<<): 將左操作數(shù)的二進(jìn)制表示向左移位。
  • 右移 (>>): 將左操作數(shù)的二進(jìn)制表示向右移位。
void main() {
  int a = 5; // 0101
  int b = 3; // 0011

  print(a & b); // 1 (0001)
  print(a | b); // 7 (0111)
  print(a ^ b); // 6 (0110)
  print(~a); // -6 (二進(jìn)制表示:..11111010)
  print(a << 1); // 10 (1010)
  print(a >> 1); // 2 (0010)
}
按位與:按位與操作對(duì)兩個(gè)操作數(shù)的每一位執(zhí)行與操作。只有兩個(gè)操作數(shù)對(duì)應(yīng)的位都是1時(shí),結(jié)果才是1,否則是0。
void main() {
  int a = 12; // 二進(jìn)制: 1100
  int b = 5;  // 二進(jìn)制: 0101

  int result = a & b; // 二進(jìn)制: 0100 (十進(jìn)制: 4)
  print(result); // 輸出: 4
}
按位或:按位或操作對(duì)兩個(gè)操作數(shù)的每一位執(zhí)行或操作。只要兩個(gè)操作數(shù)對(duì)應(yīng)的位有一個(gè)是1,結(jié)果就是1。
void main() {
  int a = 12; // 二進(jìn)制: 1100
  int b = 5;  // 二進(jìn)制: 0101

  int result = a | b; // 二進(jìn)制: 1101 (十進(jìn)制: 13)
  print(result); // 輸出: 13
}
按位異或:按位異或操作對(duì)兩個(gè)操作數(shù)的每一位執(zhí)行異或操作。只有兩個(gè)操作數(shù)對(duì)應(yīng)的位不同,結(jié)果才是1,否則是0。
void main() {
  int a = 12; // 二進(jìn)制: 1100
  int b = 5;  // 二進(jìn)制: 0101

  int result = a ^ b; // 二進(jìn)制: 1001 (十進(jìn)制: 9)
  print(result); // 輸出: 9
}
按位取反:按位取反操作對(duì)操作數(shù)的每一位執(zhí)行取反操作。0變成1,1變成0。
void main() {
  int a = 12; // 二進(jìn)制: 1100

  int result = ~a; // 二進(jìn)制: 0011 (在Dart中,這個(gè)會(huì)顯示為補(bǔ)碼)
  print(result); // 輸出: -13 (在補(bǔ)碼表示中,~1100 為 0011,結(jié)果為 -13)
}
左移:左移操作將左操作數(shù)的二進(jìn)制表示向左移位,右側(cè)補(bǔ)0
void main() {
  int a = 3; // 二進(jìn)制: 0011

  int result = a << 2; // 二進(jìn)制: 1100 (十進(jìn)制: 12)
  print(result); // 輸出: 12
}
右移:右移操作將左操作數(shù)的二進(jìn)制表示向右移位,左側(cè)補(bǔ)0(如果是有符號(hào)整數(shù)則根據(jù)符號(hào)位填充)。
void main() {
  int a = 12; // 二進(jìn)制: 1100

  int result = a >> 2; // 二進(jìn)制: 0011 (十進(jìn)制: 3)
  print(result); // 輸出: 3
}

其他操作符

  • 成員訪問(.): 訪問對(duì)象的成員
  • 條件成員訪問(?.):安全的訪問對(duì)象的成員,如果對(duì)象為null,則返回 null
  • 類型轉(zhuǎn)換(as):將對(duì)象轉(zhuǎn)換為指定的類型
void main() {
  var list = [1, 2, 3];
  print(list.length); // 3

  int? num;
  print(num?.isEven); // null

  var x = 'Hello' as Object;
  print(x is String); // true
}
as 操作符用于類型轉(zhuǎn)換,但是它不會(huì)改變對(duì)象的實(shí)際類型,它只是告訴編譯器在特定的上下文中將對(duì)象視為特定的類型
void main() {
  var x = 'Hello' as Object; // 將字符串 'Hello' 視為 Object 類型
  print(x.runtimeType); // 輸出: String
  print(x is Object);   // 輸出: true
  print(x is String);   // 輸出: true
  
  // 即使我們將 x 視為 Object,它仍然保持 String 類型
  Object y = x; // 這在實(shí)際上沒有改變對(duì)象的類型
  print(y.runtimeType); // 輸出: String
  print(y is Object);   // 輸出: true
  print(y is String);   // 輸出: true
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容