안녕하세요, 어서 오세요
네 이번 강의에서는 연산자처럼 보이지 않아서 조금 이상한 연산자에
대해 이야기할 것입니다
왜냐하면 지금까지 우리가 배운 교환원들은 기호를 이용해 숫자를
계산하는 걸 가리키기만 했거든요
이 연산자들은 사실 함수처럼 보이죠
이제 캐스트의 크기에 대해 얘기해보죠
네 cast연산자에 대해 먼저 말씀드리기 위해서 형식 변환에
대해 조금 말씀드려야겠습니다 데이터가 어떻게 변환되는지에 대해서요
데이터 타입과 다양한 데이터 타입에 대해 배웠죠
하지만 만약 다른 타입에 데이터를 할당하려고 한다면 C#
프로그래밍 언어에서 암묵적인 변환을 할 수 있어요
네 다른 유형의 데이터 변환은 자동으로 일어납니다 이것을
언어에 의한 암시적 변환이라고 합니다
혹은 프로그램에 의한 명백한 변환이라고 하죠
프로그래머와 개발자가 뭔가를 할 수 있어요
cast연산자를 이용해서 변환할 수 있죠
네 암묵적으로 변환되는 데이터는 정말 중요합니다 왜냐하면 이것을
이해해야 하기 때문입니다 왜냐하면 여러분이 개발하려는 대부분의 C 프로그램은
효과적으로 개발하기 위해서는 이러한 변환에 대한 규칙들을 이해해야 하기 때문입니다 그리고
변환에 대한 규칙들을 이해해야 합니다
왜냐하면 우리는 종종 정수와 부동 소수점 수 10진수,
그리고 전체 숫자를 꺼내죠
때때로 그것들을 섞어서 사용하게 될 거예요
그러면 어떤 식으로 변환되는지 알아야 해요
이런 경우는 가능한 한 많이 캐스트 오퍼레이터를 이용해 피하세요
하지만 캐스트 오퍼레이터를 쓰지 않으면 어떻게 되는지 이해해야 해요
네 어떻게 된 거죠? 부동 소수점이나 두 배 같은 다양한
타입에 데이터를 할당하면 그
데이터는 삭제되거나 확대될 겁니다
이 두 가지 용어를 듣게 될 거예요
번역하면 덜 정확해지고
홍보하면 더 정확해지죠
이런 종류는 섞지 마세요 하지만 유용할 수도 있어요
앞서 강의에서 보았듯이 C는 매우 유연해요
언어 디자이너들이 의도적으로 내린 결정이죠
융통성을 원했을 때는요 하지만 그것도 거래죠 더 많은
자유가 주어졌으니 마음껏
누려도 됩니다 두 종류가 섞인다는
개념을 남용하지 마세요
같은 형식을 사용해 보세요 정수에는 정수를 넣고 부수는 부동산을 넣고요
네 하지만 내포된
변환을 이해할 수 없거나 캐스트 연산자를 이용해
명시적인 변환을 할 수 없을 때
또 다른 이슈나 다른
개념은 C#의 융통성이지만 남용해선 안 돼요
네 그래서 부동 소수점 값이 c의 정수 변수에 할당될
때마다요 int x float
y x = y
이 숫자의 소수점 부분이 잘릴 거예요
int x = 0 float f
= 12죠 125를 x에
할당하면 x의 값은 12가 되죠
정확성을 잃게 될 거예요 값이 짧아질 거예요 float를
int에 할당했으니까요 int는 전체 숫자를 저장하는 방법만 알죠
그래서 프로그래밍 언어와 컴파일러가 12세로 자동으로 변환되는 거죠
수입만 저장될 거예요
네 이제 정수 변수를 부동 소수점 변수에 할당하면 그건 정반대죠
숫자 값에 어떤 변화도 초래하지 않아요
그 값은 시스템에 의해 변환되고 부동 소수점 변수에 저장되죠
그래서 흐름에 할당할 때 걱정할 필요가 없죠
한 흐름에 12개를 할당해도 여전히 12개가 되죠 0개요
네 정수에 대해 연산을 할 때 이건
그냥 값을 부동 소수점 수를 int에 할당하는 것과는 다르죠
어떤 표현이 있을 때 덧셈도
하고 뺄셈도 하고 뭐든 할 수 있죠
뺄셈이나 덧셈을 할 때는 오므라이스가 두 개예요
한 운영자는 int일 수 있고 다른 운영자는 float일 수 있죠
전환이 어떻게 일어나는지 알아야 해요
네 식에서 실행장 2개가 있고 둘 다 정수라면
분할 연산에서 나온 10진수 분량은 폐기되죠
정수 x가 있으면 20이죠
정수 y는 12예요 20 나누기 12는요?
1점 어쩌고저쩌고는 못 얻어요 한 마리만 잡을 거예요
모든 결과를 버리고 새로 넣죠 왜냐하면 int는 전체 숫자만 저장하니까요
2개의 숫자는 int이고 디비전을 하죠
플로팅 포인트 넘버는 안 나와요 소수점은 안 나와요
네 이제 한 연산자가 int고 다른 연산자가 float라면 연산은
플로팅 포인트 연산으로 형성되죠 float f가 있다면 20이죠 0 부동 소수점 a는 10
int 그런 다음 저기에 나눗셈을 하면
아니, 12 죄송합니다 적용이 더 잘 되겠네요 그럼 결과는
부동 소수점 수를 하고 결과는 1점이 되겠군요
8888이든 뭐든요 맞아요 1점 어떤 경우든 간에요
이 데이터를 아무것에도 할당하지 않죠 뭘 반환할 건지에 대한 표현이죠
디비전에 두 개의 int가 있습니다 전체 숫자가 되겠죠
int와 더블 또는 float요 float가 될 거예요 늘 10진수가 되죠
10진수 부동 소수점 연산이요
이것이 내포된 전환이죠 네 이 점을 이해해야 해요 아무것도
하지 않으면 프로그램이 뭘 하고 뭘 하게 되는지요
그렇죠 하지만 여러분은 명시적인 변환
작업을 시도해야 합니다 캐스트 오퍼레이터를 이용해서요
이런 걸 캐스팅이라고 하죠
캐스팅을 여러 언어로 할 수 있어요
여러분은 명시적인 변환 작업을 합니다
원하는 데이터가 무엇인지 말하죠
할 수 있다면 해야죠 안 그러면 데이터가
강등되거나 잃어버릴 수 있거든요
네 두 개의 int를 사용하고 분할을 할 때 동등하게
나누어지지 않으면 모든 데이터를 잃게 되죠
네 그래서 여러분은 원하는 형식의 변환을 명시적으로
요구할 수 있습니다
네 캐스트라고 하는데요 괄호 안에 원하는 유형의
이름을 쓰고 양보다 앞선 것을 의미하죠
괄호와 type name은
cap 연산자를 구성하죠.
왼쪽 괄호를 하고 데이터 타입을 명시하고 괄호를 쓰는 거죠
네 그리고 그 오른쪽에 있는 게 뭐든 그
오른쪽에 있는 식이 뭐든 심지어 단일 변수라고 해도 괄호
안에 있는 것으로 변환할 거예요
실제 유형을 긴 유형처럼 원하는 거죠 유형이란 단어를 대체하는 거예요
네 따라서 연산 연산자는 모든 연산 연산 연산자보다 우선 순위가 높습니다 단일 마이너스 연산자와
단일 플러스 연산자는 제외하고요 우린 아직 선례가 뭔지 몰라요
다음 강의에서 할 거예요 우선순위는 기본적으로 어떤 일이
벌어지느냐입니다 연산의 순서가 실행되는 거죠
몇 가지 예제를 보여드리죠 네 이 시점에서 이해해야 할 것은 타입캐스트 사용자가
다른 사용자들보다 우선시된다는 것입니다 두 가지는 제외하고요 무효 마이너스, 무효 플러스
여기 예를 들면 숫자 21이 있죠 51 그리고 cast연산자도
있죠 cast연산자라는 걸 아니까요 괄호 안에 있고
형식이 있으니까요 21번째 테이크를 말하는
거예요 그걸 int로 변환하죠
네 플로팅 포인트 넘버를 변환하면
int가 되죠 전체 숫자 21이요
오른쪽도 마찬가지입니다 26을 전환하네요 99로 입력하세요
네 여기서 실제로 무슨 일이 일어날까요? 문에서 이 표현을 하면 21 더하기
26으로 평가될 거예요 0에서 데이터를
줄이겠죠 51, 0과 같은 숫자죠 99살요
그게 cast연산자입니다 괄호 안에 데이터 타입을 포함하고 있는 모든 것이죠
자주 보시게 될 거예요
21 더하기 26을 플로트로 캐스트하면 .0을
추가할 거예요
보통은 더 정밀하게 캐스팅하지 않아요 더 정밀한
게 없으니까요
더 정확한 유형에서 덜 정확한 유형으로 캐스팅했죠
float에서 int에 가깝죠
다른 형식을 사용할 때 몇몇 프로그램에서
종종 볼 수 있는 거죠 산수를 할 때는 여러 가지 형식을
사용하지 않는 게 좋아요 하지만 그렇게 되면 이걸 보게 될 거예요
오퍼레이터요 오퍼레이터 크기요 좀 이상한 오퍼레이터죠
다른 오퍼레이터와 달라요 이건 기능처럼 보이네요
하지만 크기는 작아야 해요 동작을 수행하죠
기능 지향적인 건 아무것도 안 하죠
그럼 주어진 형식에 의해 메모리가 몇 바이트를 차지하는지
알려줘요 함수처럼 보이죠 인수를 취하니까요
네 그 예제를 보여드리죠 하지만 메모리에서 바이트를 반환할 뿐이죠 네 기억하세요 여러분이 실행하는
시스템에 따라 플랫폼에 따라
운영 체제에 따라 하드웨어의 아키텍처에 따라 데이터
타입이 달라집니다 사이즈가 다른 메모리
정수리는 1 시스템 8에 4 바이트고요
네 그래서 sizeof연산자를 특별한 키워드로 쓸 수 있습니다 c 연산자요 그리고
데이터 타입을 전달하면 메모리에서 몇 바이트를 사용하는지 알려주죠
사이즈오프는 연산자이지 함수가 아니에요
네 네 런타임이 아니라 컴파일 타임에 평가돼요 인수에 변수 길이 배열이 사용되지 않는다면요
그걸 언급하죠 네 이 말은 기본적으로 배열의
크기 안에 변수가 있으면 컴파일
타임이나 런타임에서 해결되지 않는다는 거죠 별로 중요하지
않아요
네 크기of연산자에 대한 인수는 변수가 될 수 있어요 배열 이름 int
같은 기본 데이터 타입의 이름 부동 소수점 수도요 파생
데이터 타입의 이름 어떤 것이든 또는 식도 될 수 있죠 것들도요
x + y의 크기라고 할 수 있죠
x의 크기 더하기 y의 크기
혹은 결과 숫자죠 x는 int, y는 int 16 크기라면
이건 인치 4 바이트예요
네 int 1이면 부동 소수점 연산이고 그 결과가 부동 소수점 연산이라면
부동 소수점 연산은 8 바이트가 되겠죠
하지만 여러 용도로 쓸 수 있고 여러 용도로 써야 해요 Sizeof int는 type
int라는 변수로 바이트를 차지하고 있어요
여러분의 시스템에 따라 4나 8을 반환하죠
네 크기of연산자를 식에 적용할 수도 있어요 앞서 말씀드린
것처럼요 그 결과는 값의 크기입니다
에어리어 표현으로 알 수 있죠 두 개의 int가 함께 있으면 여전히 int가 되는 거죠
여전히 크기로 유지될 거예요 포인터에 대해 얘기할 때 연산자의 크기도 사용되는 걸 보실 수 있어요
오퍼레이터라서 지금 얘기하고 싶었어요
네 더 많은 개념을 다루면서 이와 관련된 많은 예제와 캐스팅을
다루도록 하겠습니다
네 네 특히 포인터에 대해 이야기할 때 이 연산자의 크기가
더 중요한 역할을 합니다 얼마나 많은 메모리를
할당할 것인지 계산할 때 포인터를 의미하기 때문에 사이즈오버 연산자를 사용합니다
정확해야 하기 때문이죠
다른 용도로도 쓸 수 있어요
네 그러니 가능한 한 코드 크기 연산자를 써서 하드 코드 크기를 계산하는
걸 피하세요
하드 코드 크기 마법의 숫자는 좋은 게 아닙니다 다른 시스템이라면
코드 4 온 1 시스템은 int이고 다른 시스템은
8일 수 있어요 그러니 가능한 한 사이즈를 쓰세요 포인터에
관해 얘기할 때 이게 훨씬 더 관련성이 있는 걸 보시게 될 거예요
? 네, 맞아요
좀 이상한 건 별표
연산자인데요
스스로 별표라고 했을 수도 있어요 이건 곱셈에서 이미 얘기했죠
하지만 저 별표에는 왼쪽과 오른쪽의 오퍼랜드가 달렸죠
네 별표 연산자를 변수에 적용하고
별표 변수 이름만 말하면 오른쪽에 인수가 딱 하나인 경우 다른 걸
나타내요 그럼 별표 연산자는 사실 이건 포인터예요
섣불리 판단하면 안 돼요
네 다시 한 번 이건 지금 반복하진 않을게요 포인터에 관해 얘기할
때 이걸 살펴볼 테니까요
하지만 *a 같은 걸 보면 진짜라고 놀라지 마세요
별표와 포인터 연산자를 이용하죠
물음표 콜론도 보이실 거예요
이건 의사 결정에 사용되는 연산자예요
네 그리고 조건이 참이면 왼쪽에 있는 게 참이면 콜론이 평가된
후 오른쪽에 있는 값이 그런 식으로요 그렇지 않으면
이프-엘스 진술의 속기 기호예요
제4기통이라고 하죠 네 다시 말씀드리지만 지금
이 얘기를 자세히 하고 싶지는
않아요 특정 주제를 얘기할 때 이 얘기를 할 예정이거든요
결정문에 대해 얘기할 때 터닝 오퍼레이터에 대해 얘기할게요 별표 연산자 UNARY는
포인터에 관해 얘기할 때 다룰 거예요
네 하지만 지금 이걸 보시면 지금 말씀드리고 싶은 건 그들은 기술적으로 운영자이기 때문에
사용 사례를 이해할 수 있다는 거죠 개념을 얘기할 때요 고마워요