336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

 비트 연산이 너무너무 중요하다고 했는데 안쓰는 사람은 정말 안써요~


 저같아도 안씁니다..


하지만 정말 중요하고 프로그램의 초석이라면 초석이라 무시할 수 없는 부분이에요 다소  


많이 지루하고 난해하고~ 복잡할지라도 꼭 봐야 합니다~~~( 프로그램을 입문하기 위해서는~ )




비트 연산 개념


& ( 비트 단위 AND ) : 두개의 비트가 모두 1일 때 1을 반환


| ( 비트 단위 OR ) 두개의 비트중 한개라도 1일때 1반환


^ ( 비트 단위 XOR ) : 두개의 비트가 서로 다를 경우만 1반환


~ ( 비트 단위 NOT 보수연산, 비트 반전


<< ( 왼쪽으로 쉬프트 비트를 왼쪽으로 이동시킨 값을 반환


>>( 오른쪽으로 쉬프트 비트를 오른쪽으로 이동시킨 값을 반환




소스 코드 :

#include <stdio.h>


int main(void)

{

char a = 15; // 0 0 0 0 1 1 1 1  

char b = 10; // 0 0 0 0 1 0 1 0

char result = 0;


// & 연산 

result = a & b; // 0 0 0 0 1 0 1 0       10  

printf("& 연산 : %d \n", result);


// | 연산 

result = a | b; // 0 0 0 0 1 1 1 1       15  

printf("| 연산 : %d \n", result);


// ^ 연산 

result = a ^ b; // 0 0 0 0 0 1 0 1       5  

printf("^ 연산 : %d \n", result);


// << 연산

a = a << 1;

printf("a<<1 연산 : %d \n", a);  // 0 0 0 0 1 1 1 1  ->   0 0 0 1 1 1 1 0   30


b = b >> 1;

printf("b>>1 연산 : %d \n", b);  // 0 0 0 0 1 0 1 0  ->   0 0 0 0 0 1 0 1   5



printf("%d\n", 600 >> 2);

return 0;

}


결과



활용 법 (029 비트 연산자 이해하기( |, &, ~, ^, <<, >> ) - 2 참고)



쉬프트 연산으로는 곱셈과 나눗셈을 할수있다.

1비트씩 이동할 때 두배씩 작어지거나 커집니다.



#C언어, #C언어입문, #프로그램입문, #비트연산

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

 바이너리(binary)



이제 진수도 알았으니 바이너리에 대해서 깊게 이야기를 해보겠습니다~


바이너리는 2진수 입니다. 그렇다면 정수로 2진수를 표현 했다면 


음수로는 어떻게 표현할가요??? 


기준은 byte로 하고 이것은 8 bit 입니다.

메모리 공간

부호 표현 공간


데이터 표현공간

 

 

 

 

 



붉은 색 : 부호 표현 공간


노란 색 : 데이터 표현 공간


부호 표현 공간은 Most Significant Bit 라고 직역하면 최상위 비트(가장 중요한 비트) 0일때 양의 수가 되고 1일때 음의수가 됩니다.


그렇다면 나머지 7개 공간으로 표현 할수 있는 수는 1 1 1 1 1 1 1 입니다. 10진법으로 계산 하면 127 입니다.



-----------------------------------------------

Tip


여기서 잠깐~ 10진수를 2진수로 바꾸는 식을 그림으로 간단히?! 설명하고요~





(프로그램은 정말 산수를 잘해야합니다...ㅠㅠ ㄷㄷ)


 




-----------------------------------------------



음수는 보수를 취해요~


부호 표현 공간만 1로 바꿔 주고 같은 양의 수와 음의 수를 덧셈을 해보면 말도 안되는 답이 나와요 ~


예를 들어 


0  0  0  1  0  0  0  0

1  0  0  1  0  0  0  0

---------------------

1  0  1  0  0  0  0  0


위내용은 


16 + (-16) 입니다..


그렇다면 답은 당연히 0이 나와야하는데


1  0  1  0  0  0  0  0 이 나옵니다.. 부호 비트 빼고 한다면~ 32란 결과가 나옵니다..;;; 이상하죠?!


그래서 해당 수에 앞에서부터 1의 보수가되게 만들어줘요~  그리고 마지막에 1을더해서 올림수가 발생하도록합니다


넘어가는 수는 당연히 버려지게됩니다. ;;; 제가 설명하고도 난해 한부분이 많내요 ㅎㅎㅎ;;;;하지만 이렇게 사용한답니다 ㅠㅠ 


그러면 정확한 음의수가됩니다~


0  0  0  1  0  0  0  0

---------------------

1  1  1  1  0  0  0  0



마지막으로 숫자 1에대허서 -1을 만들어보겠습니다.


0  0  0  0  0  0  0  1

---------------------

1  1  1  1  1  1  1  1


;; 쉽죠?;;; (안 쉽다...제길...)


실수부분도 변환하는 법이 있지만 현재에서 설명한다면 프로그램 입문하시는 분이 보고 도망갈 것 같아서 설명은 여기까지 ~~~


부동소수 설명할 기회가 있다면 실수 바이너리에 대해서 조금 깊게 이야기 할게요~


#C언어, #C언어입문, #프로그램입문, #바이너리연산

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

목표 : 


1. 진수에 대해서 이해해보자.


2. 바이너리(binary)를 이해해보자.


3. 비트연산자를 이해하고 그 활용법에 대해서 연구해보자.




진수의 개념 :


자릿수의 올림을 기준으로 정해진다.( 10진수기준으로 이름이 만들어 젔다. )


example 1) 

( 2진수 ) 1 다음의 수가 존재 하지 않기 때문에 자릿수의 올림이 발생하였다.  1 0  = 2 ( 10진수 기준 )

( 3진수 ) 2 다음의 수가 존재 하기 않기 때문에 자릿수의 올림이 발생하였다.  1 0  = 3 ( 10진수 기준 )

.

.

.

( 8진수 ) 7 다음의 수가 존재 하지 않기 때문에 자릿우의 올림이 발생했다. 1 0 = 8( 10 진수 기준)   


example 2)

 

 2진수

 3진수

 4진수

 5진수

 6진수

 7진수

 8진수

 9진수

 10진수

 11진수

 12진수

 13진수

 14진수

 15진수

 16진수

  1

 1

 1

 1

 1

 1

 1

 1

 1

 1

 1

 1

 1

 1

 1

 10

 2

 2

 2

 2

 2

 2

 2

 2

 2

 2

 2

 2

 2

 2

 11

 10

 3

 3

 3

 3

 3

 3

 3

 3

 3

 3

 3

 3

 3

 100

 11

 10

 4

 4

 4

 4

 4

 4

 4

 4

 4

 4

 4

 4

 101

 12

 11

 10

 5

 5

 5

 5

 5

 5

 5

 5

 5

 5

 5

 110

 20

 12

 11

 10

 6

 6

 6

 6

 6

 6

 6

 6

 6

 6

 111

 21

 13

 12

 11

 10

 7

 7

 7

 7

 7

 7

 7

 7

 7

 1000

 22

 20

 13

 12

 11

 10

 8

 8

 8

 8

 8

 8

 8

 8

 1001

 100

 21

 14

 13

 12

 11

 10

 9

 9

 9

 9

 9

 9

 9

 1010

 101

 22

 20

 14

 13

 12

 11

 10

 A

 A

 A

 A

 A

 A

 1011

 102

 23

 21

 15

 14

 13

 12

 11

 10

 B

 B

 B

 B

 B

 1100

 110

 30

 22

 20

 15

 14

 13

 12

 11

 10

 C

 C

 C

 C

 1101

 111

 31

 23

 21

 16

 15

 14

 13

 12

 11

 10

 D

 D

 D

 1110

 112

 32

 24

 22

 20

 16

 15

 14

 13

 12

 11

 10

 E

 E

 1111

 120

 33

 30

 23

 21

 17

 16

 15

 14

 13

 12

 11

 10

 F

 10000

 121

 100

 31

 24

 22

 20

 17

 16

 15

 14

 13

 12

 11

 10

 10001

 122

 101

 32

 25

 23

 21

 18

 17

 16

 15

 14

 13

 12

 11

 10010

 200

 102

 33

 30

 24

 22

 20

 18

 17

 16

 15

 14

 13

 12

 10011

 201

 103

 34

 31

 25

 23

 21

 19

 18

 17

 16

 15

 14

 13



Tip :


우리는 왜 10진법을 사용하는지 이유에 대해서 한번도 생각 안해봤고 의문 또한 없었을 것 입니다.


그냥 마냥 편해서라고 생각하시는 분이 많이 있을거라 생각합니다.


하지만 인간의 손에 붙어 있는 손가락이 10개 이기 때문에 십진법을 썻다는 정설이 강합니다^^~


날짜를 셀때도 손가락을 접어가며 셈하잖아요?^^ 



그렇다면 왜 컴퓨터는 2진법을 사용할까요??? 

 
 앞시간에 설명 드린 메모리 구조와도 관련이있습니다. 모든데이터를 저장하는 공간은 하나의 스위치로 이루워저있습니다.  이스위치가


올라가면 1 내려가면 0으로 되는 구조이기 때문입니다^^


다시 생각해 보면 또 왜 16진법을 쓸가요?


2의 4승으로이고 자릿수에 표현에 매우큰 이점이 있습니다.


음~ 1 byte = 8 bit 이루어저 있고 16진수 두자리로 표현할 수 있습니다.


11111111 ( 2 진수 ) = 255( 1진수 ) = FF( 16진수 )


참 쉽죠~!? ㅎㅎ


#C언어, #C언어입문, #프로그램입문, #진수개념

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

개념 : 


1. 한 줄에 같은 자료형을 가진 복수의 변수를 정의할수 있다.

2. 한 줄에 다른 자료형을 초기화 할수 있다.



소스코드 : main.c


#include <stdio.h> 


int main(void) 

int a = 0, b = 1; // 방식1 


int c, d;// 방식2 


c = 2, d = 3; 


float e, f; 


c = 3, e = 4, f = 5; // 방식3 



return 0; 

}




이번에는 결과 대신 장단점에 대해서 이야기 해보려 합니다.

장점 및 사용처 :  짧은 코드를 작성할 때 간절하게 사용할 수 있고 줄을 아낄 수 있다.

단점 : 큰 프로젝트에 소스 코드를 작성할 시 명확히 구분 지어야 할 곳에 사용할지 디버깅

및 가독성에 어려움을 겪을 수 있다.


#콤마연산자#C언어#C언어입문#프로그램입문



336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

개념:


조건을 검사하여 조건이 참 일 경우 오른쪽을 반환하고 거짓일 경우 왼쪽을 반환한다.



소스코드 : main.c


#include <stdio.h>


#define TRUE 1

#define FALSE 0


int main (void)

{

int value1 = 1;

int value2 = 3;


int result1 =0;

int result2 =0;



result1 = value1 < value2 ? value1 : value2; // 사용 예시1

printf("사용 예시1 : value1 < value2 ? value1 : value2 의 결과 %d \n", result1);


result2 = value1 != value2 ? 3 : -1; // 사용 예시2

printf("사용 예시2 : value1 != value2 ? 3 : -1 의 결과 %d \n", result2);


if(value1 < value2 ? TRUE : FALSE)// 사용 예시3

{

printf("사용 예시 3의 조건문 진입\n");


while(value1 < value2 ? TRUE : FALSE)//사용 예시4

{

++value1;

printf("사용 예시 4 실행 \n");

}

}



return 0;

}



결과




#c언어#c언어입문#프로그램입문#삼항연산#조건연산




336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

개념 :


1. && ( And ) : 좌측 논리 상황과 우측 논리 상황이 모두 참인경우 참이 됩니다.

2. ||(  Or  ) : 좌측 논리 상황과 우측 논리상황이 한쪽만 참이어도 참이 됩니다.

3. !( Not ) : 참이면 거짓으로 거짓이면 참으로 만듭니다.


상식 : 


!(  not  ) 부정, (  ==  )같다를 합치면 ( != ) 형태가 됩니다. 같은 의미로 이렇게 사용할수도 있습니다.


//example )

int value1 = 0;

int value2 = 0;


int result1 = !(value1 == value2);

int reuslt2  = value1 != value2;



소스코드 : main.c


#include <stdio.h>


int main(void)

{

int value1 = 3;

int value2 = 8;

int value3 = 13;

int value4 = 88;


int result1 = value1 < value2 && value3 <= value4; // && 연산자 활용

int result2 = value1 < value2 || value3 <= value4; // || 연산자 활용

int result3 = !result2; // ! 연산자 활용 

int result4 = value1 != value2 && value3 != value4; // 상식 내용 보충


printf("value1 < value2 && value3 <= value4  의 결과 : %d \n", result1);

printf("value1 < value2 || value3 <= value4  의 결과 : %d \n", result2);

printf("!result2  의 결과 : %d \n", result3);

printf("result4 = value1 != value2 && value3 != value4  의 결과 : %d \n", result4);


return 0;

}


결과




#C언어입문#C언어#프로그램입문#논리연산자이해하기#논리연산자




336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

개념 :
1.   A < B : A는 B보다 작다.
2.   A > B : A는 B보다 크다.
3.   A <= B : A는 B보다 작거나 같다.
4.   A >= B : A는 B보다 크거나 같다.
5.   A == B : A는 B보다 같다.
6.  문장이 참이면 연산한 값이 참( 1 )이 됩니다.
7. 문장이 거짓이면 연산한 값이 거짓( 0 )이 됩니다.

상식 :
그렇다면 A < B < C 라고 하면 어떻게 될까요?
 A와 B의 관계를 먼저 연산하고 그 값과( 0, 1) C와 비교하게  되며 최종 결과를 대입( = )연산자를 통해 좌측 변수로  값이 복사 됩니다.  
정리 
1. 명령줄에 연산자를 찾는다.
2. 우선 순위 연산자를 차례대로 처리 한다.

example 

소스 코드 : main.c


#include <stdio.h>
int main(void) { int value0 = 0; int value1 = 1; int value2 = 2; int result = 0; result = value0 < value1 < value2; printf("Value0 = %d\n", value0); printf("Value1 = %d\n", value1); printf("Value2 = %d\n", value2); printf("value0 < value1 < value2 결과 : %d \n", result); value2 = 0; printf("value2 의 값을 %d로 수정!!!\n", value2); result = value0 < value1 < value2; printf("value0 < value1 < value2 결과 : %d \n", result); return 0; }


결과




#C언어#C언어입문#프로그램입문#관계연산자




336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

개념 :
1. 변수의 내용을 한 단계 증가나 감소를 진행합니다.
-  일반 변수의 경우 1을 증가감 합니다.
- 포인터의 경우 현재 자료형의 크기만큼  증가감 합니다.

2. 선위와 후위가 있어 연산처리 방식에 차이가 있습니다.
- 선위의 경우 변수의 앞에 위치하며 먼저 증가감을 실행 후 나머지 명령을 처리합니다.
- 후위의 경우 변수의 뒤에 위치하며 먼저 명령들을 처리하고 증가감을 실행합니다.
※ 명령은 한 줄을 뜻하며 ;(세미콜론) 이 나올 때까지의 구성입니다.

3. 연산자 우선순위
- *(곱셈), /(나눗셈), %(나머지) 보다 우선시 연산되는 순위를 가지고 있습니다.


int value1 = 2;

int value2 = 2;

int example = ++value1 * value2; // 3 * 2 


소스 코드 : main.c


#include<stdio.h>


int main(void)

{

int value = 0;


printf("시작결과 출력 : %d\n", value);


printf("후위 연산 (증가) value++ : %d\n", value++);

printf("후위 연산 (증가) value++ : %d\n", value++);

printf("후위 연산 (증가) value++ : %d\n", value++);


printf("선위 연산 (증가) ++value : %d\n", ++value);

printf("선위 연산 (증가) ++value : %d\n", ++value);

printf("선위 연산 (증가) ++value : %d\n", ++value);


printf("후위 연산 (감소) value-- : %d\n", value--);

printf("후위 연산 (감소) value-- : %d\n", value--);


printf("선위 연산 (감소) --value : %d\n", --value);


printf("최종결과 출력 : %d\n", value);


return 0;

}


결과


336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

개념 : 

덧셈 뺄셈 곱셈 나눗셈 연산자를 사용해서 결과를 얻어서 출력 해보도록 하겠습니다.


그전에 앞서 세미콜런( ; ) 에 대해서 설명이 없었던 것같습니다. 


항상 끝에 ; 를 입력했는데 이것은 명령 문장의 끝을 알리는 연산자 입니다.


그러면 소스 코드를 보면서 간단히 이해 해볼가요?


소스 코드 : main.c


#include<stdio.h>


int main(void)

{

int Value1 = 12;

int Value2 = 91;


int Result1 = Value1 + Value2;

int Result2 = Value1 - Value2;

int Result3 = Value1 * Value2;

int Result4 = Value1 / Value2;


printf(" %d + %d = %d \n", Value1, Value2, Result1); // 덧셈 연산

printf(" %d - %d = %d \n", Value1, Value2, Result2); // 뺄셈 연산

printf(" %d * %d = %d \n", Value1, Value2, Result3); // 곱셈 연산

printf(" %d / %d = %d \n", Value1, Value2, Result4); // 나눗셈 연산


return 0;

}


결과


336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

개념

숫자나 변수 앞에 붙을수 있으며 수학에서 말하는 음의수와 양의 수의 개념과 동일하다


백문의 불여 일타! ㅎㅎㅎ


소스 코드 정리하면서 주석고 함께!!!


소스코드 : main.c


#include <stdio.h>


#define PLUS +

#define MINUS -


int main(void)

{

int Value_1 = 0;

int Value_2 = 0;


int Result_1 = 0;

int Result_2 = 0;


Value_1 = 165;

Value_2 = -58;


Result_1 = MINUS(Value_1) PLUS Value_2; // 첫번째 붙은 MINUS는 부호 연산자가 됩니다. 두번째 PLUS는 산술 연산자 입니다.

Result_2 = PLUS(Value_1) MINUS Value_2; // 첫번째 붙은 PLUS는 부호 연산자가 됩니다. 두번째 MINUS는 산순 연산자 입니다.


// Result_1 = -(165) + (-58)

// Result_2 = +165 - (-58)


printf("Result_1 : %d\n", Result_1);

printf("Result_2 : %d\n", Result_2);


return 0;

}


결과


+ Recent posts