using System;
namespace _001_003_005_Operadores
{
class Program
{
static void Main(string[] args)
{
//primário
// t.m, x(), x[], x++, x--, new T() ou new T[]
Console.WriteLine("agnaldo".ToUpper());
Console.WriteLine();
String s = "agnaldo";
Console.WriteLine(s[0]);
Console.WriteLine();
int x = 1;
Console.WriteLine(x);
Console.WriteLine(x++);
Console.WriteLine(x);
Console.WriteLine();
String str = new String(new Char[]
{ 'a', 'g', 'n', 'a', 'l', 'd', 'o' });
Console.WriteLine(str);
Console.WriteLine();
//criação de objetos e arrays
//typeof(T), checked(x), unchecked(x) default(T), delegate{...}
Console.WriteLine(typeof(Random));
Console.WriteLine();
Console.WriteLine(x = int.MaxValue);
Console.WriteLine(unchecked(++x));
//OverflowException
//Console.WriteLine(checked(x++));
Console.WriteLine(default(Int64));
//delegate será visto no momento apropriado
Console.WriteLine();
//unário
//+x, -x, !x, ~x, ++x, --x, (T)x
x = 1;
Console.WriteLine(+x);
Console.WriteLine(-x);
Console.WriteLine(!false);
Console.WriteLine(~x);
Console.WriteLine(++x);
Console.WriteLine(--x);
double d;
Console.WriteLine(d = (double)x);
Console.WriteLine();
//mutiplicativo
//x * y, x / y, x % y
x = 10;
Console.WriteLine(x * x);
Console.WriteLine(1 / x);
Console.WriteLine(123 % x);
Console.WriteLine();
//aditivo
//x + y, x - y
Console.WriteLine(x + x);
Console.WriteLine(1 - x);
Console.WriteLine();
//deslocamento
//x >> y, x << y
Console.WriteLine(x >> 2);
Console.WriteLine(x << 3);
Console.WriteLine();
//relacional
//x > y, x < y, x >= y, x <= y
Console.WriteLine(x > 2);
Console.WriteLine(x >= x * 2 - x / 2);
Console.WriteLine(x < Math.Sqrt(x) * Math.Sqrt(x));
Console.WriteLine(x <= 2);
Console.WriteLine();
//teste de tipo
//x is T, x as T
Console.WriteLine(s is String);
Console.WriteLine(s is Object);
Console.WriteLine();
//igualdade
// x == y, c != y
Console.WriteLine(s == s.ToUpper());
Console.WriteLine(s != s.ToUpper());
Console.WriteLine();
//lógico
// x & y, x | y, x ^ y
Console.WriteLine(6 & 4);
Console.WriteLine(6 | 4);
Console.WriteLine(6 ^ 4);
//condicional
//x && y, x || y, x ? y : z
Console.WriteLine(true && true);
Console.WriteLine(true && false);
Console.WriteLine(false && true);
Console.WriteLine(false && false);
Console.WriteLine(true || true);
Console.WriteLine(true || false);
Console.WriteLine(false || true);
Console.WriteLine(false || false);
Console.WriteLine(x % 2 == 0 ? "x é par" : "x é ímpar");
Console.WriteLine();
//coalesce
//x ?? y
int? i = null;
int? j = 10;
int? k = 100;
Console.WriteLine(i ?? j);
Console.WriteLine(j ?? k);
Console.WriteLine();
//atribuição
//=, +=, -=, *=, /=, %=, >>=, <<=, &=, |=, ^=
Console.WriteLine(x = 11);
Console.WriteLine(x += 1);
Console.WriteLine(x -= 1);
Console.WriteLine(x *= 1);
Console.WriteLine(x /= 1);
Console.WriteLine(x %= 1);
Console.WriteLine(x >>= 1);
Console.WriteLine(x <<= 1);
Console.WriteLine(x &= 1);
Console.WriteLine(x |= 1);
Console.WriteLine(x ^= 1);
Console.WriteLine();
//função anônima (expressão lambda)
//T(x) => y
Func<int, bool> Par = l1 => l1 % 2 == 0; //ou l1 & 1 == 0
Func<int, int, int> Somar = (l1, l2) => l1 + l2;
Console.WriteLine("{0} + {1} = {2}", 22, 28, Somar(22, 28));
Console.WriteLine("50 é par? {0}", Par(50));
Console.ReadKey();
}
}
}