4장_데이터를 가공하는 연산자

CJB_ny·2022년 5월 11일
0

C#

목록 보기
6/9
post-thumbnail

4.3 증가 연산자 && 감소 연산자

namespace TestProject
{
    public class TestClass
    {
        static void Main(string[] args)
        {
            int a = 10;
            Console.WriteLine(a++);
            Console.WriteLine(++a);

            Console.WriteLine(a--);
            Console.WriteLine(--a);
        }

    }
}

이거 전위, 후위 차이 숙지

4.4 문자열 결합 연산자

int a = 123 + 456;

string b = "123" + "456";

4.5 관계 연산자

  • <, >, !=, ==

이런거

bool result;

result = 3 > 4; => False

4.6 논리 연산자

논리곱 연산자

&& : AND

논리합 연산자

|| : OR

부정 연산자

! : NOT

4.7 조건 연산자

피연산자가 세개임.

조건식 ? 참일때의 값 : 거짓일 때의 값

이런식으로 씀.

4.8 조건부 연산자

어떨때 쓰노??

https://tsyang.tistory.com/34
https://2-nan.tistory.com/4
를 참조


조건부 연산자 ?.는 C# 6.0부터 도입.

?. 가 하는일은 객체의 멤버에 접근하기 전에 해당 객체가 null인지 검사하여 그 결과가 참(즉, 객체가 null)이면 그 결과로 null을 반환하고, 그렇지 않으면 . 뒤에 지정된 멤버(== 변수?)를 반환.

-> 실제로 해당 객체가 null일 경우 null반환하는지

이거 실행해서 보면은

진짜 아무것도 반환 안됨,

그러니까

int? bar 는 bar 가 null값을 허용한다는 것이고,

(-> 3.6 Nullable형식)

https://velog.io/@starkshn/C3%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B3%B4%EA%B4%80%ED%95%98%EA%B8%B0#nullable-%ED%98%95%EC%8B%9D

foo가 null이 아닐 때 foo의 필드인 member에 접근하게 해준다는 것이다.

지금은 null이라 접근 안됨.

이렇게 해주면

null이 아니라 접근 가능, 출력하면 0이 출력됨(int초기화 안해주면 0 들어감)

?[ ]는 객체 멤버의 접근이 아닌 배열과 같은 컬렉션 객체의 첨자를 이용한 참조에 사용된다.

이래 사용을 한다.

4.9 비트 연산자

내가 생각하는 C#에서의 비트연산을 수행을 하면은

이 결과값은 128이 나와야하는데

왜 -2가 나오노?

맞다 -2가 나오는 것이.

그리고

byte = 0 ~ 255

sbyte = -128 ~ 127 까지라서

계산이 저렇게 나오는 것이 맞다.

4.9.3 비트 논리 연산자

여기서

  • &

  • |

  • ^

  • !

이렇게 나옴.

그런데 배타적 논리합 연산자 ^ 를 보면은

만약 게임에서 상태를 표기를 할 때는 이렇게하지 않고

CPP어소에서 했던

https://velog.io/@starkshn/CPP%EC%96%B4%EC%86%8C11%EB%B9%84%ED%8A%B8-%EC%97%B0%EC%82%B0%EC%9E%902#%EC%83%81%ED%83%9C-%ED%99%95%EC%9D%B8

이부분에서

이렇게 하던거 기억하나?

현재 상태에서 THIRSTY라는 상태를 빼고싶을 경우 이렇게함.

4.10 할당 연산자.

이부분에서

  • =

  • +=

  • -=

...

  • /=

  • &=

  • |=

  • ^=

  • <<=

  • =

이런거 나옴 이것들이 "할당 연산자"이다.

4.11 null 병합 연산자

null 조건부 연산자 처럼 프로그램에서 종죵 필요한 변수/객체의 null검사를 간결하게 만들어즈는 역할을 한다.

null이라면 0을 아니면 원래 들어있던 값을 출력하는데

객체? 는 안되는 것 같고 int, long이런것만 되는듯?

문제

1. i++, ++i 차이점

후위증가 선위 증가

이렇게 출력된다.

디버그 잡아보면

현재 a = 1이고 (수행되기전임)

수행하면

수행되고 나면 증가함.

(+ C#에서는 정수형에 값할당 안하면 0이다. 그래서 b에 값을 할당해주기 전 상태 이기 때문에 현재 0 들어가있음)

값할당 해주면 이제 1이고,

코드 실행하면 바로 2가된다.

2. 후위 선위

  • i = i + 1;

  • i++;

  • ++i;

  • i += 1;

값이 다른것은 i++;

이렇게 나온다.

3. 비트 연산자

int a = 8 >> 1;

int b = a >> 2;

a = 4
b = 1

나온다.

이거 옮겨봐라 그리고

이케나옴.

4. 16진수

int a = 0xF0 | 0x0F ??

F가 0x0F가 15이고 이것의 16묶음이 0xF0 이다.

16진수가 왜 16묶음이냐면

10진수일 경우 1 2 3 4 5 6 7 8 9 10 그다음 11이다.

즉, 1의 자리수가 10개가 모이면 그다음 자릿수가 1증가함

16진수의 경우

1 2 3 4 5 6 7 8 9 A B C D E F 그다음 자릿수 올라감 0x10

F = 15이다.

그러면 15의 16묶음 == 16배이면 240이다.

15 * 16 = 240

그렇다면

int a = 0xF0 | 0x0F ?? 는? ->

이게 0xF0; 240이고

이게 0x0F; 15이면

255 나온다.

이렇게.

5.

string a = 10;
string b = a == 0 ? "가나다" : "ABC";

b는 ABC 나온다.

ABC들어간고 확인 가능.

profile
https://cjbworld.tistory.com/ <- 이사중

0개의 댓글