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);
}
}
}
이거 전위, 후위 차이 숙지
int a = 123 + 456;
string b = "123" + "456";
이런거
bool result;
result = 3 > 4; => False
&& : AND
|| : OR
! : NOT
피연산자가 세개임.
조건식 ? 참일때의 값 : 거짓일 때의 값
이런식으로 씀.
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형식)
foo가 null이 아닐 때 foo의 필드인 member에 접근하게 해준다는 것이다.
지금은 null이라 접근 안됨.
이렇게 해주면
null이 아니라 접근 가능, 출력하면 0이 출력됨(int초기화 안해주면 0 들어감)
?[ ]는 객체 멤버의 접근이 아닌 배열과 같은 컬렉션 객체의 첨자를 이용한 참조에 사용된다.
이래 사용을 한다.
내가 생각하는 C#에서의 비트연산을 수행을 하면은
이 결과값은 128이 나와야하는데
왜 -2가 나오노?
맞다 -2가 나오는 것이.
그리고
byte = 0 ~ 255
sbyte = -128 ~ 127 까지라서
계산이 저렇게 나오는 것이 맞다.
여기서
&
|
^
!
이렇게 나옴.
그런데 배타적 논리합 연산자 ^ 를 보면은
만약 게임에서 상태를 표기를 할 때는 이렇게하지 않고
CPP어소에서 했던
이부분에서
이렇게 하던거 기억하나?
현재 상태에서 THIRSTY라는 상태를 빼고싶을 경우 이렇게함.
이부분에서
=
+=
-=
...
/=
&=
|=
^=
<<=
=
이런거 나옴 이것들이 "할당 연산자"이다.
null 조건부 연산자 처럼 프로그램에서 종죵 필요한 변수/객체의 null검사를 간결하게 만들어즈는 역할을 한다.
null이라면 0을 아니면 원래 들어있던 값을 출력하는데
객체? 는 안되는 것 같고 int, long이런것만 되는듯?
후위증가 선위 증가
이렇게 출력된다.
디버그 잡아보면
현재 a = 1이고 (수행되기전임)
수행하면
수행되고 나면 증가함.
(+ C#에서는 정수형에 값할당 안하면 0이다. 그래서 b에 값을 할당해주기 전 상태 이기 때문에 현재 0 들어가있음)
값할당 해주면 이제 1이고,
코드 실행하면 바로 2가된다.
i = i + 1;
i++;
++i;
i += 1;
값이 다른것은 i++;
이렇게 나온다.
int a = 8 >> 1;
int b = a >> 2;
답
a = 4
b = 1
나온다.
이거 옮겨봐라 그리고
이케나옴.
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 나온다.
이렇게.
string a = 10;
string b = a == 0 ? "가나다" : "ABC";
b는 ABC 나온다.
ABC들어간고 확인 가능.