C#

210520 C#_null 조건부/병합 연산자, 시프트 연산자

S_pot 2021. 5. 20. 15:29

null 조건부 연산자

static void Main(string[] args)
        {
            string T = "지옥으로 키티";

            Console.WriteLine($"[{T.Length}]");

            T = null;
            Console.WriteLine($"[{T?.Length}]");      // []: null 조건부 연산자
            Console.WriteLine($"[{T ?? "널이얌1"}]"); // ??: null 병합 연산자, null값이면 [널이얌1]을 출력

            T = "지옥으로 키티";
            Console.WriteLine($"[{T ?? "널이얌2"}]");   

        }

 

출력값

 

 

시프트 연산자

static void Main(string[] args)
        {
            byte bNum = 128;
            Console.WriteLine("bNum    : " + bNum);
            Console.WriteLine("bNum<<1 : " + (bNum << 1)); // <<: 왼쪽 시프트 연산자
            // bNum이 9일때 00001001 이고 왼쪽으로 1번(bNum<<1) 밀려 00010010 이되고 즉, 18 이된다.
            Console.WriteLine("bNum>>1 : " + (bNum >> 1)); // >>: 오른쪽 시프트 연산자
                                                           // bNum은 1byte임에도 불구하고 큰숫자가 나올 수 있는 이유는 bNum 자체가 커진게 아니라
                                                           // bNum의 숫자를 밀어준 것이므로 int형으로 계산되기 때문이다.

            sbyte sbNum = 127;
            ++sbNum;    // sbyte의 최대 양수를 초과하기 때문에 -128이 출력된다.
            Console.WriteLine("sbNum    : " + sbNum);
            Console.WriteLine("sbNum<<1 : " + (sbNum << 1));            
            Console.WriteLine("sbNum>>1 : " + (sbNum >> 1)); // 정수일때 오른쪽으로 밀 때 음수이면 빈자리를 1로 채우고 나머지는 0이 된다.

        }

 

출력값