2011년4월1일...부가연산자, cast연산자, escape sequence, 제어문, 선택문, 마인드스톰 AlphaRex
일단 시간 순으로 올리고 후에 내용별 정리할 것.
1.부가연산자
부가연산자 = 대입연산자
꽃을 flower라 부르거나 꽃이라 부르는 것과 같은 개념.
어떻게 부르는 가는 그렇게 중요하지 않고 회사에 가서 용어는 맞춰 부르면 됨.
2.손 코딩
시험칠 때 PC없이 프로그래밍.
int A = 0: <- 콜론이 아니라 세미콜론
5 => 6 <- ‘=’(대입연산자)가 우측으로 가야됨.
상기와 같은 예는 컴파일단계를 거치지 않으면 오류를 알기 힘드니 그 만큼 더 어렵다.
3.부가/복합 부가연산자
x += 5; (복합부가연산자)는,
x = x + 5; 의 축약된 형태로 일반적으로 쓰는 부가연산자이고 다른 사람들이 보기 쉽게 짜려면 ‘부가연산자’가 ‘복합부가연산자’보다 풀어 써서 이해하기 쉽다.
예전엔 남이 알기 어렵게 짜는 것이 잘하는 것이었으나 지금은 협업이 중요하니 알기 쉽게 해야함.
3. cast연산자 (형변환)
4.우선순위
cast연산자보다 둥근괄호가 우선순위가 높으므로 괄호를 먼저 처리하나 상기의 그림에 있는 식은 괄호가 별 의미가 없다. 다음 3.0을 int형으로 변환해 3이 되고 나누기를 하면 결과는 1이 된다.
5. scanf(), printf()에서 사용되는 형식지정자
printf() |
scanf() |
형식 |
%c |
%c |
단일 문자 |
%s |
%s |
문자열 |
%d |
%d |
부호 있는 정수 |
%i |
부호 있는 정수. %d와 같음 | |
%i |
10진수, 8진수, 16진수 | |
%f |
%f |
실수 (십진표기) |
%e |
%e |
실수 (과학적 표기법) 156.78 –> 1.5678E+002 |
%g |
실수 3.3.00003 –> 3.3 | |
%u |
%u |
부호 없는 정수 |
%x |
%x |
부호 없는 16진수 |
%o |
%o |
부호 없는 8진수 |
%p |
16진수 메모리 주소(?) %08x와 같이 16진수 8자리 출력. |
%p로 100을 출력하면 00000064 %08x와 같음.
6.제어문
명령문들은 순차적으로 실행되지만 제어문을 통하여 실행 순서를 바꿀 수 있음.
7.예제 3-1 (각 단계별 값을 확인하기 위해 출력문 추가)
VS6.0 CL컴파일러는 상기와 같은 경고메세지를 출력하지 않으나 VS2010은 출력하고 실행 시 계속 진행할 것인지 세 번이나 물어본다. VS6.0도 옵션을 주면 경고를 할 것 같다.
num1과 num2를 선언하면 처음에는 의미 없는 값들로 채워져 있다.
num1에 78을 넣으면 CU에서 메모리로 데이터가 이동한다.
num1의 값을 읽어와 레지스터에 저장.
ALU에서 10을 더 함.
결과값을 다시 그 레지스터에 저장.
레지스터의 값을 num2에 저장.
gcc에선 초기화하지 않으면 0으로 컴파일러가 0으로 초기화를 하나 VS는 왼쪽의 스크린샷과 같이 이상한 값이 들어가 있다. 그런데 둘이 같은 값이라니 조금 이상하다.
78로 초기화하고 10을 더한 88로 초기화를 함으로 메모리에는 의미 있는 값이 담겼다. (?)
★계산결과를 저장하지 않고 읽기만 하는 명령문
num1 + 10; 메모리에서 읽어와 ALU에서 10을 더하고 끝
num1; 메모리에서 읽어와 아무 것도 하지 않고 끝
별 의미 없는 명령문이나 임베디드 시스템에선 메모리에서 읽기만 해도 장치가 동작할 수 있다. (나중에 함)
8. 복합문 (예제 3-3)
여러 개의 명령문을 묶어 하나의 실행단위로 만든 것으로 중괄호로 표시한다.
두 번째 b는 괄호가 닫히면 소멸하여 다음 b의 값을 출력하면 그 전 23으로 초기화된 값이 출력됨.
9. 선택문
if (논리식) 명령문;
if ( 100 > 10) A = 10;
이렇게 쓰지 말고 아래와 같이,
if(100 > 10)
{
A = 10;
}
이렇게 풀어 쓰는 것이 좋다.
int A = 0;
scanf(“%d”, &A); 500입력
if(100 < A) 100<500 참이므로,
{
A = 10; A는 10이 됨.
}
printf(“%d”, A);
return 0;
10. 마인드스톰 NXT
NXT컨트롤러 내부에 ARM칩이 들어 있다. ARM칩의 응용분야 중 하나로,
레고는 ARM칩을 사다 장난감을 만들었다.
<BricxCC>
스마트폰을 루틴했다.(?) –> NXC도 해킹해서 C프로그래밍 가능하게 한 것으로 정식버전이 아님.
task main()
int main()이 아닌 이유는 작은 OS가 들어 있고 PC와 다르기 때문.
11. 마인드스톰 AlphaRex
똑바로 직진을 못하는 이유를 찾기 위해 분해해서 기어의 위치와 결함이 있나 보았으나 결국 찾지 못 하였다.
뿅망치하고 2극창을 달아 보았다.
직진만 하도록 했는데 계속 오른쪽으로 간다.
앞으로 가라고 했는데 뒤로 간다. (땀)
'내장형하드웨어 > 일일보고서' 카테고리의 다른 글
2011년4월5일...if문, switch문, BricxCC (마인드스톰 Tribot) (2) | 2011.04.07 |
---|---|
2011년4월4일...if문, if-else문, 다중if문, switch문, 마인드스톰 로봇대전 (0) | 2011.04.04 |
2011년3월28일...변수, 메모리, scanf(), 정수 자료형, 상수, 마인드스톰 Spike (0) | 2011.04.03 |
2011년3월31일...연산자, 형변환, 연산우선순위와 속도, 반올림,마인드스톰 (0) | 2011.04.01 |
2011년3월30일...ASCII, 문자, 문자열, 마인드스톰 spike 검은 라인따라가기 (0) | 2011.03.30 |