[TIL]20210622

박창현·2021년 6월 22일
0

TODAY I LEARNED

목록 보기
2/53

c언어

xor 연산기호 ^(캐럿)

^은 수학식에서 거듭제곱(power)을 나타내는 기호와 모양은 같지만,
C언어에서는 배타적 논리합(xor, 서로 다를 때 1)의 의미를 가진다.

사이트의 xor연산 필요성의 예시:
두 장의 이미지가 겹쳐졌을 때 색이 서로 다른 부분만 처리할 수 있다.
배경이 되는 그림과 배경 위에서 움직이는 그림이 있을 때,
두 그림에서 차이만 골라내 배경 위에서 움직이는 그림의 색으로 바꿔주면
전체 그림을 구성하는 모든 점들의 색을 다시 계산해 입히지 않고
보다 효과적으로 그림을 처리할 수 있게 되는 것이다.
비행기 슈팅게임 등을 상상해보면 된다.

3항 연산자

(개인적으로 신기함.)

3개의 요소로 이루어지는 3항(ternary) 연산자는
"조건식 ? (참일 때의 값) : (거짓일 때의 값)” 의 형태로 사용하는 연산자이다.

  • 조건식의 계산 결과가 참인 경우에는 ':' 왼쪽의 값 또는 식으로 바뀌고,
  • 거짓인 경우에는 ':' 오른쪽의 값 또는 식으로 바뀐다.
printf("%d", a>b ? a:b); //두 값 중 큰 값이 출력된다.

예시 코드는 a>b 의 결과가 참(1)이면 (a>b ? a:b)의 결과는 a가 되고,
거짓(0)이면 (a>b ? a:b)의 결과는 b가 된다.

3개의 값을 비교할 때
가장 큰 값 구하기 : (n>m ? n:m)>k ? (n>m ? n:m):k
가장 작은 값 구하기 : (n>m ? m:n) > k ? k: (n>m ? m:n)

코드블록이 한 줄 이라면?

실행해야 할 명령들이 여러 개일 때 코드블록 기호 { }로 묶어 주는데,
코드블록의 내용이 논리적으로 1개 단위라면 코드블록 기호를 생략할 수 있다.

if(a%2==0) printf("%s", "even");
else printf("%s", "odd");

switch, case 문

switch(정수값)
{
  case 'A': //문자 'A'가 "정수값" 65('A'의 아스키 값)로 저장되기 때문에 가능하다.
    ...;
    break;
  case 'B':
    ...;
    break;
  case 'C':
    ...;
    break;
  default:  // else 문과 같게 사용된다. 위의 case는 break문으로 빠져나가기에 default값이 실행되는 조건을 조절 가능했기 때문.
    ...;
}

스위치

또한, break를 쓰지 않는다면 계속 실행한다는 점을 이용해

switch(a)
{
  ...
  case 3:
  case 4:
  case 5:
    printf("spring");
  break;
  ...
}

처럼 하면 3 또는 4 또는 5 가 만족한다면 같은 즉, or 처럼 사용할 수 있다.

스위치2

c에서 [ ' ' ] 와 [ " " ] 의 차이점?

코드업 1069번 문제를 if문을 이용해서 풀어보면 어떨까 하고 코딩해보았다.

' ' " " 의 비교.

#include <stdio.h>

int main(void) {
  char n;
  scanf("%c",&n);

  if (n=="A"){
    printf("best!!!\n");
  }
  else if (n=="B") {
    printf("good!!\n");
  }
  else if (n=="C"){
    printf("run!\n");
  }
  else if (n=="D"){
    printf("slowly~\n");
  }
  else {
    printf("what?\n");
  }
  
}

로 하면 무조건 what? 이 출력되었다.
이는 c언어에서 " " 을 사용하면 입력된 문자열 + null이 입력되기에 scan된 값과 차이가 나기 때문이다.

'hello' -> hello
"hello" -> hello + [null]

이를 해결한 코드는 아래와 같다.

#include <stdio.h>

int main(void) {
  char n;
  scanf("%s",&n);

  if (n=='A'){
    printf("best!!!\n");
  }
  else if (n=='B') {
    printf("good!!\n");
  }
  else if (n=='C'){
    printf("run!\n");
  }
  else if (n=='D'){
    printf("slowly~\n");
  }
  else {
    printf("what?\n");
  }
}

goto문: 미리 지정한 이름표의 지점으로 가서 실행을 이어나간다.
"이름:" 과 같이 콜론(:)이 붙어있는 부분을 이름표(label, 레이블)라고 한다.
레이블은 특별한 선언 없이 사용할 수 있으며 언더바(_)나 영문자로 시작하면 된다.
레이블은 한 단어처럼 공백없이 모두 붙여 써야 한다.

  int n;
reload: //레이블은 콜론(:)으로 끝내고, 일반적으로 *들여쓰기*를 하지 않는다.
  scanf("%d", &n);
  printf("%d", n);
  if(n!=0) goto reload; //reload라고 적혀있는 레이블로 실행 이동

goto

do-while 문:
do
{ //코드블록
...
}while(조건);
구조는 while( ) { ... } 과 유사한 반복 실행 구조를 만들 수 있는데
다른 점은 무조건 한 번은 실행된다는 것이다. 또한, 마지막에 세미콜론을 반드시 붙여야 한다.

웹 공부

태그 레퍼런스 참조

https://developer.mozilla.org/en-US/docs/Web/HTML/Element
https://www.w3schools.com/tags/default.asp

태그 - 제목(HEADING)

heading을 줄여서 h로 표현한다.
<h1> ~ <h6> 까지 존재한다.

태그 - 단락과 개행(PARAGRAPH, LINKBREAK)

<p> </p> 글의 단락을 나타냄.
<br> </br> 글의 줄바꿈을 생성함.

태그 - 텍스트 관련 태그(B, I, U, S)

<b> </b> 굵게
<i> </i> 이탤릭체
<u> </u> 밑줄
<s> </s> 중간선
이러한 태그들을 중첩할려면 <b><i></i></b> 와 같이 작성해야함.

태그 - 앵커(ANCHOR)

<a> 로 표현.
반드시 href 속성이 들어가야한다. 뜻은 하이퍼 레퍼런스 이다.
<a herf="~~">xxx</a>

target 속성에 대해 조금더 다뤄보자.
일단 속성을 기재하지 않으면 _self가 기본값으로 설정되어있다.
이는 링크가 있는 탭에서 링크로 이동하는 것이다.
반대로 _blank로 설정한다면 새로운 탭에 링크를 열게 된다.

<a href="주소" target="_blank">이름</a>

이와 같은 방법으로 표현할 수 있다.

또한 내부링크라는 것도 이용가능하다. 내부링크를 통해 페이지 내부의 특정 요소로 초점을 이동할 수도 있다. 엄청 긴 페이지의 경우 '상단으로 가기' 같은 기능이 있는데 이것이 내부링크를 이용한 기술이다.
href="#(id)" (id)에 설정된 id 값을 넣으면 그곳으로 이동할 수 있다.
html내부에서 id속성을 주고 이를 이용하면된다.

<h1 id="top">t.o.p.</h1>
<a href="#top">상단으로 이동하기<a>

이런식으로 구성하면 상단으로 이동하기를 눌렀을때 id가 top인 내용t.o.p. 쪽으로 이동하게 된다.

태그 - 의미없이 요소를 묶기 위한 태그(CONTAINER)

의미없이 순전히 무언가를 담기 위한 또는 요소를 묶기 위한 용도로 사용되는 태그이다.

실무에서 스타일을 주기위해서 또는 서버에 보내는 데이터를 담기위해 사용된다고 한다.

<div> division 의 약자, 블록 레벨 태그
<span> 인라인 레벨 태그

간단하게

블록 레벨 요소: 모니터 화면에 한상자씩 채우는 요소.
인라인 레벨 요소: 라인 위에 표현. 주로 블록 레벨 요소안에서 사용됨.
<p>가 블록 레벨 요소이고, <b> <i>등이 인라인 레벨 요소이다.

<div>
	<span>ABC</span>DEFG
</div>

이렇게 해도 화면에는 ABCDEFG로 표현된다.

태그 - 리스트

<ul> unordered list: 순서가 없는 리스트
<ol> ordered list: 순서가 있는 리스트

리스트 태그 내부의 내용은 <li>로 분리시켜 표현한다.

<ul>
	<li>내용</li>
</ul>

<dl> description list: 용어를 설명하는 리스트.
<dt> definition term: 용어를 구분한다.
<dd> definition description: 용어의 정의를 나타낸다.

<dl>
	<dt>용어</dt>
   <dd>용어에 대한 설명</dd>
</dl>

태그 - 이미지

<img src="./~" alt="xxx" width="400" height="400">

문서에 이미지를 삽입.
src : 이미지 경로 지정
alt : 이미지의 대체 텍스트 지정, 상대경로와 절대경로 두가지 모두 사용가능.
대체 텍스트: 이미지를 설명하는 글, 서버가 이미지를 못가져오는 경우에 사용
width / height : 이미지의 크기를 지정. optional한 옵션. 하나의 값만 조절하면 자동으로 비율이 유지된 상태에서 크기가 변경됨.

<!-- 상대경로, ./은 현재 폴더를 의미 -->
<img src="./images/pizza.png" alt="피자">

<!-- 절대경로 -->
<img src="C:/users/document/images/pizza.png" alt="피자">
<img src="http://www.naver.com/pizza.png" alt="피자">

태그 - 표(TABLE)

행(row) = 가로방향
열(columm) = 세로방향

<table> : 표를 나타내는 태그
<tr> : 행을 나타내는 태그
<th> : 제목 셀을 나타내는 태그
<td> : 셀을 나타내는 태그
<tr>은 셀을 나타내는 <th>, <td>를 자식으로 가진다.

표를 구성할 때는 가로방향 먼저 작성한다고 생각하면 편하다.
즉 tr -> td
<caption> : 표의 제목, table태그 중 가장 위에 위치해야함.
<thead> : 제목 행을 그룹, <th> 태그를 이용해 제목 행 셀을 나타냄. 굵은 글씨.
<tfoot> : 바닥 행을 그룹, 최신 HTML에서는 <tbody> 의 뒤에 있어야함.
<tbody> : 본문 행을 그룹

셀 병합. <td> 태그안에 xxxspan="x" 형식으로 작성.
<colspan> : 셀을 가로방향으로 병합
<rowspan> : 셀을 세로방향으로 병합

병합할 때는 row와 col이 반대로 구성되는 느낌으로 이해하자.

병합을 했을경우, 병합한 칸수 만큼 셀을 가지고 있는 것임을 염두해야함.

.
.
.
.

<colgroup> <col> scope headers 의 속성 탐구하기. 내일 기차에서....

profile
개강했기에 가끔씩 업로드.

0개의 댓글