Advertisement
Panglot

Lesson 3 - Operators

Mar 15th, 2014
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.42 KB | None | 0 0
  1. using System;
  2. class Operators
  3. {
  4.     static void Main()
  5.     {
  6.         //Оператор ^ е изключващо или.
  7.  
  8.         //В C# деленето на реални числа (double, float, decimal) позволява
  9.         //делене на нула. Реалните числа могат да приемат стойности Infinity и NaN(Not a Number)
  10.  
  11.         //Битовите операции са като логическите но работят по битове или
  12.         //с други думи конвертира числата в двоична бройна система и прилага
  13.         //логическите операции върху всеки бит (1 или 0) от числото.
  14.         // | - "или", & - "и", ^ - отново "изключващо или", ~ - обръща стойността на битовете
  15.         //(0 става 1 а 1 става 0), <<, >> - измества всички битове с толкова позиции наляво или
  16.         //надясно с колкото му зададем.
  17.         //Можем да конвертираме бройни системи от една към друга към string с
  18.         //Convert.ToString(number,notation), като на мястото на number се поставя числото
  19.         //което искаме да конвертираме а на мястото на notation бройната система в която
  20.         //искаме да го конверитраме. Добавянето на .PadLeft(length, symbol), позволява допълването
  21.         //от ляво (PadRight е отдясно) със символ по наш избор. length се заменя с броя на символите
  22.         //до които искаме да допълва, symbol се замества със символа който искаме да използва.
  23.  
  24.         //По-прости примери.
  25.         int a = 3;
  26.         Console.WriteLine(Convert.ToString(a, 2).PadLeft(32, '0') + " = a = " + a);
  27.         int b = 5;
  28.         Console.WriteLine(Convert.ToString(b, 2).PadLeft(32, '0') + " = b = " + b);
  29.         Console.WriteLine(Convert.ToString(a | b, 2).PadLeft(32, '0') + " using a|b = " + (a | b));
  30.         Console.WriteLine(Convert.ToString(a & b, 2).PadLeft(32, '0') + " using a&b = " + (a & b));
  31.         Console.WriteLine(Convert.ToString(a ^ b, 2).PadLeft(32, '0') + " using a^b = " + (a ^ b));
  32.         Console.WriteLine(Convert.ToString(~a, 2).PadLeft(32, '0') + " using ~a = " + (~a));
  33.         Console.WriteLine(Convert.ToString(a << 1, 2).PadLeft(32, '0') + " using a<<1 = " + (a << 1));
  34.         Console.WriteLine(Convert.ToString(a >> 1, 2).PadLeft(32, '0') + " using a>>1 = " + (a >> 1));
  35.         Console.WriteLine(); // Hotkey CW + Tab + Tab
  36.  
  37.         //Полезни програмки с битови операции:
  38.         int pos, number, move, mask, bit, result;
  39.  
  40.         //Взимане на стойността на бита на определена позиция от определено число:
  41.         pos = 5;
  42.         number = 291;            // 00000001 00100011
  43.         move = number >> pos;    // 00000000 00001001
  44.         bit = move & 1;          // 00000000 00000001 = 1
  45.  
  46.         //Променяне на бит на определена позиция на 0
  47.         pos = 5;
  48.         number = 291;                 // 00000001 00100011
  49.         mask = ~(1 << pos);           // 11111111 11011111
  50.         result = number & mask;       // 00000001 00000011 = 259
  51.  
  52.         //Променяне на бит на определена позиция на 1
  53.         pos = 4;
  54.         number = 291;                // 00000001 00100011
  55.         mask = 1 << pos;             // 00000000 00010000
  56.         result = number | mask;      // 00000001 00110011 = 307
  57.  
  58.         //Оператор който винаги забравям: "?:".
  59.         // b?x:y - Ако b е true резултата е x, в противен случай е y.
  60.         //Оператор typeof(type), като на мястото на type се замества с това което
  61.         //искате да проверите, по същият начин работи и sizeof(type), но за размера;
  62.         Console.WriteLine(typeof(int) + " has " + sizeof(int) + " baits");
  63.         Console.WriteLine();
  64.  
  65.         //Оператора "is" проверява дали обект е идентичен на друг.
  66.         Console.WriteLine("Is 5 int: " + (5 is int));
  67.         Console.WriteLine("Is 5 bool: " + (5 is bool));
  68.         Console.WriteLine();
  69.  
  70.  
  71.         //Оператор "??".
  72.         int? j = null;
  73.         int y = j ?? -1; //Ако стойността от ляво (j) е null, взима стойността от дясно на "??"
  74.         Console.WriteLine("y is {0}.", y);
  75.         j = 1;
  76.         y = j ?? -1;//Щом стойността от ляво (j) вече не е null, взима нея.
  77.         Console.WriteLine("y is {0} now.", y);
  78.  
  79.         //Скрито конвертиране (cast) (implicit conversion) е автоматичното конвертиране на
  80.         //един тип данни към друг. Позволено е когато не се губи информация при конвертирането
  81.         //или с други думи когато по-малък тип данни трябва да се ковертира към по-голям.
  82.         int small = 5;
  83.         long large = small; //Позволено е става автоматично. int<long
  84.         //Явното ковертиране (explicit conversion) се случва по наше желание.
  85.         //Обикновено се изисква когато има опасност от загуба на информация.
  86.         //Стандартното (type)variable или добавяне на буква накрая.
  87.         large = 7;
  88.         small = (int)large;
  89.         float conversion = 1.75f;//Всяко реално (дробно) число се счита за double от
  90.         //компилатора. Нужно е добавянето на f накрая за да може компилатора да го конвертира
  91.         // във float. Това е явно конвертиране.
  92.         Console.WriteLine();
  93.  
  94.  
  95.  
  96.     }
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement