논리 연산자
#include <stdio.h>
int main()
{
int A;
A=10;
3||(A=5);
printf("%d\n",A);
return 0;
}
3||(A=5); 이 부분이 논리 식이다.
위 소스를 컴파일하면 3||(A=5); 부분은 참과 or X 이므로 무조건 참이된다. 컴파일러가
3|| 까지 계산하고 뒤의 (A=5)부분은 그냥 버리고(어짜피 참) 논리식 참으로 1 이라고
계산한다. |
그래서 출력해보면 10이 나타나게 된다.
3||(A=5); 부분의 3을 0으로 바꾸게 되면 0||(A=5); 이되면서
0||로는 값을 알수가 없으므로 뒤의 (A=5)까지 계산하게 되어서 출력하면 5가 나오게 된다.
C언어에서의 논리값의 참과 거짓에 대한 별도의 자료형이 없고 0은 거짓이고,
그 이외의 모든 값은 참이다.
증감 연산자
++a a++ --a a--
1)전치형
B=++A
①A=A+1
②B=A
A를 1증가시킨다음, B에 값을 넘긴다.
2)후치형
B=A++
①B=A
②A=A+1
B에 값을 넘긴 다음 A 값을 증가시킨다.
복합부가 연산자
복합부가 연산 |
부가 연산 |
x += 5; |
x = x + 5 |
x -= 5; |
x = x - 5 |
x %= 5; |
x = x % 5 |
x *= 5; |
x = x * 5 |
캐스트 연산자
C에서는 = 가 형동등성(Type이 같은지)을 확인한다.
short
char = int
int
처럼 위는 같은 정수형이므로 = 성립이 잘된다.
하지만 int + float 형과 같이 두 피연산자의 자료형이 다를 때 시스템이 자동적으로
int형은 float 형으로 변환시킨 다음, 덧셈 연산을 수행한다.
컴파일러에서 자동적으로 변환시키기 때문에 이것을 묵시적 형변환(캐스팅) 이라고 한다.
반면 명시적 형변환 이 있는데
ex) A=7 / (float)6;
처럼 ()안에 그 형을 넣어서 6(int형)을 float형으로 바꾼것이다.
(float)처럼 ( ) 안에 들어가는 형을 캐스트 연산자라고 한다.
(float)를 써서 형을 바꾼것이기 때문에 명시적 형변환 이라고 한다.
scanf
#include <stdio.h>
int main()
{
char A;
//입력 9
scanf("%c",&A); //9입력을 글자(문자)로 ='9' 읽어 들이겠다는 말이다.
scanf("%d",&A); //9입력을 숫자로 읽어 들이겟다는 말이다
printf("%c\n",A);
return 0
}
|
scanf("%c",&A);
printf("%d",A);
입력으로 9를 넣으면 출력으로 9의 아스키코드값인 57 이 출력된다.
%? 를 표현식이라고 하며 형식지정자 라고도 한다.
scanf("%c",&A); 의 &A 의 &을 주소연산자라고 하며 문자열을 제외하고 반드시
붙여야한다.
제3장 제어문
3.1 변수의 선언과 초기화
#include <stdio.h>
int main()
{
int num1; //변수 선언
int num2;
num1=78; //변수 num1 의 값이 정해졌다 : 초기화
num2=num1+10;
printf("num1 : %d\nnum2 : %d\n",num1,num2);
return 0;
}
변수가 선언되어 초기화가 안되면 변수는 미정값을 가진다.
위의 소스에서
(num1=78;) CPU에서 78을 버스를 통해 num1로 보낸다.
(num2=num1+10;) num1에서 78값을 다시 CPU로 보내서 레지스터에 저장한다.
레지스터의 78+10을 ALU 가 계산한후 88이 다시 버스를 통해 num2 로 간다.
최적화 : 위에서 78을 다시 CPU에 보내지 않고 가지고 있는 78을 사용하는 것과 같은 것을
최적화라고 한다. 최적화에서는 Cache 캐쉬를 사용하는데 나중에 문제가 될수가 있다.
3.2 복합문
복합문은 여러개의 명령문을 묶어 하나의 실행단위로 만든 것으로 중괄호로 표시한다.(안에 항이
여러개이다)
3.3 선택문
3.3.1 if 문
if 문은 선택문의 가장 간단한 형태로, 주어진 조건이 만족할 경우만 실행된다. 조건은 논리식으로
표현된다.
구문형식은
if (논리식) 명령문;
흐름도 (Flow chart)
마름모 ◇ if 에서 분기가 일어난다.
#include <stdio.h>
int main()
{
int num1;
int num2;
int bigger;
printf("Plese enter two integers: ");
scanf("%d %d",&num1,&num2);
bigger=num1;
if(num1<num2)
{
bigger=num2;
}
printf("The larger number is : %3d\n",bigger);
}
|
if 문을 사용하여 키보드로 입력받은 두 수 중 큰 수를 화면에 출력하는 프로그램이다.
플립플롭
1비트의 정보를 저장하는 기능을 가진 전자회로
0또는 1의 출력 값을 가지며 다른회로로 부터 출력값을 변경하라는 순간적인 펄스신호(클럭) 를
보낼 때까지 출력값이 일정하게 유지된다.
RS플립플롭 : 회로제어
D플립플롭 : 데이타전송,저장
|