본문 바로가기

C#

C#- 코딩(2진법)/응용VS2019프로그래밍(0521)

반응형

1. . NET 이란? 

-닷넷 프레임워크(.NET Framework, 이전 이름: 닷넷)는 마이크로소프트에서 개발한 윈도우 프로그램 개발 및 실행 환경이다. 네트워크 작업, 인터페이스 등의 많은 작업을 캡슐화하였고, 공통 언어 런타임(Common Language Runtime)(CLR)이라는 이름의 가상 머신 위에서 작동한다.

 

가상 머신 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 가상 머신(영어: virtual machine, VM)은 컴퓨팅 환경을 소프트웨어로 구현한 것, 즉 컴퓨터를 에뮬레이션하는 소프트웨어다. 가상머신상에서 운영 체제나 응용 프로

ko.wikipedia.org

우리가 주로 사용하는 도메인 (ex daum.net / naver.com)은 숫자로 이루어진 IP주소를 (203.133.167.81)를 문자화 한것 입니다. DNS 또는 Domain Name System은 사람이 읽을 수 있는 도메인 이름(예: www.amazon.com)을 머신이 읽을 수 있는 IP 주소(예: 192.0.2.44)로 변환합니다.

컴퓨터의 저장 단위
비트
(Bit)
바이트
(Byte)
킬로바이트
(Kilobyte)
메가바이트
(Megabyte)
기가바이트
(Gigabyte)
테라바이트
(Terabyte)
페타바이트
(Petabyte)
엑사바이트
(Exabyte)
제타바이트
(Zettabyte)
요타바이트
(Yottabyte)


Binary Digit를 줄인 말. 1번의 의미와도 서로 통한다. 정보라고 취급할 수 있는 가공된 데이터(자료)들을 나타내는 최소 단위이며, 컴퓨터 용량이나 프로그램 처리능력의 최소 단위로 사용한다. 2의 X제곱에서 이 X가 바로 비트를 나타낸다. 또한 8비트=1바이트인데, 이는 컴퓨터가 문자 데이터를 8개의 비트 단위로 묶어 한 번에 처리하기 때문이다. 참고로 ASCII 코드는 한 문자당 최대 7비트(128가지)의 문자를, EBCDIC 코드는 한 문자당 최대 8비트(256가지)의 문자를 표현할 수 있다.

2^8 = 256 가지수 (0~255)

4bite = nibble

8bite = 1byte = 2nibble

1024byte = 1Kbyte   1000M = 1KM

1024Kbyte = 1Mbyte

1024Mbyte = 1Gbyte

1024Gbyte = 1Tbyte

(컴퓨터는 2진법 체계로 우리가 살고 있는 10진법 세상과는 다르게 2의 제곱수로 만든 1000에 가장 근접한 숫자가 1024이다.)

 

2^16 = 65,536/1024 = 64Kbyte

2^32 = 4Gbyte

2^64 = 16,777,216Tbyte

 

2진법 특성상 프로그래밍할때 소수점은 최대한 자제 곱셈보다는 덧셈으로 입력하여 최적화!

 

 

자동차 속도 프로그램 - 1byte(0~255) 로 가능 

-프로그램을 만드는 주체는 사람이기 때문에 문자를 사용

byte speed;

  |        |     

type  name

 

L-value    =    R-value

변수only        상수and변수

 

2.L-value와 R-value의 정의
L-value는 반드시 명시적인 메모리 공간을 가져야 합니다. 값이나 개체를 대입 받기 때문입니다.
그러나 R-value는 잠깐 사용하고 사라지는 임시적인 값입니다.
어찌되었거나 잠시만 유지해서 L-value에 값을 전해줄 수만 있으면 됩니다.
이에 R-value는 ‘임시 값’에 대한 통칭이 됩니다.

 

1 int value = 20;

이 코드는 허용됩니다. 20은 상수이며, ‘임시 값’이고, R-value이기도 합니다.
(상수의 경우 기계어로 번역시 명령어에 그대로 포함되며, 코드 영역의 일부가 됩니다.)

 

1 20 = value;

따라서 ‘임시 값’에 대입하는 위와 같은 코드는 허용되지 않습니다.

 

1
2
int value = 20;
value = 20 + value;

두번 째 value에 대한 대입문이 동작할때, 연산자 우선순위에 따라 20 + value가 먼저 처리됩니다.
그리고 이 20+ value라는 값은 새로운 ‘임시 값’, r-value가 되어 l-value인 value에 대입됩니다.
이 임시 값은  이 대입 식이 끝나면 사라집니다.

 

3.l-value와 r-value의 차이점

l-value와 r-value의 가장 큰 차이점은 바로 이름입니다.
l-value는 이름에 의해 프로그래밍으로 제어할 수 있습니다.
그러나 r-value는 이름이 없습니다. 내부적으로 사용되고, 내부적으로 사라집니다.
따라서 프로그래밍으로 제어할 수 없습니다.

 

4.부호비트방식

 이는 최상위 비트(Most Significant Bit)를 부호표기를 위해 남겨두는 방식이다.

예를 들어 8 bit 자료의 경우에는 양수 1은 0000 0001, 음수는 1000 0001으로 표현하는 방식이다.

 

 하지만, 이는 +0과 -0이라고 0이 두 개 존재하는 문제가 있고, 양수와 음수간의 연산이 어렵다는 단점이 있어 실수(float, double)방식의 표현에만 쓰인다.

 

5.2의 보수법 방식

 보수(補數)는 각 자리의 숫자의 합이 어느 일정한 수가 되게 하는 수이다. - 위키백과 

 

 각 진법의 보수에는 같은 수의 보수법과 같은 수 -1의 보수법이 존재한다.

예를 들자면 10진수에선 10의 보수법과 9의 보수법이 존재하는 것이다.

 

십진수 7의 10의 보수는 7과 어떤 수를 합했을 때 10이 되어야 하므로,

7 + x = 10, 즉 x는 3이 된다.

 

십진수 7의 9의 보수는 7 + x = 9가 되어야 하므로 2가 된다.

 

위 둘의 관계를 볼 때 10진수의 10의 보수는 9의 보수 + 1 과 같다는 것을 알 수 있다.

 

컴퓨터는 2진수를 사용하므로  2의 보수법과 1의 보수법이 존재한다.

 

이진수의 보수법은 아주 간편한데, 우선 1의 보수법을 알아보겠다.

이진수 1111 1011의 1의 보수는 그냥 반대로 뒤집은 수라 생각하면 편하다.

즉, 0000 0100 이 되는 것이다.

여기서 2의 보수를 구하려면 +1 만 시켜주면 되므로 0000 0101이 된다.

 

그런데 여기서 신기한 것이 1111 1011과 이 숫자의 2의 보수를 덧셈을 해주면 다음과 같은 결과를 확인할 수 있다.

 

   1111  1011

 + 0000  0101 

 1 0000  0000

 

최상위 1만 제외하면 0이 되는 것이다!

 

위의 1111 1011를 담을 수 있는 크기를 8 bit로 한정한다면, 제일 높은 자리수 1을 버림으로서 뺄셈 연산을 

할 수 있다는 것이다.

 

이진수 1111 1011은 십진수로 바꿨을 때 251이 되고 0000 0101은 5가 되는데...

이런 원리를 이용하면 2의 보수법으로 구한 수와 덧셈 연산을 함으로써 뺄셈 연산을 할 수 있게 된다.

 

즉 251을 -5로 인식하도록 만드는 것이다.

 

8 bit가 표현할 수 있는 숫자의 범위는 0~255가 되는데, 그 반인 127에서 잘라 128부터는 거꾸로 음수-128 로 표현하는 것이다.

 

예를 들어 8 - 5를 보수법으로 계산을 해본다고 하면, 우선 -5의 보수를 구해보자

-5 의 2의 보수는 1111 1011이 된다.

 

   1111 1011    >> -5의 2의 보수

 + 0000 1000    >> 십진수 8의 이진수

 1 0000 0011

 

위와같이 8 bit 범위를 넘는 윗 자리수 1만 제외하면 3이라는 값이 나오는 것을 확인할 수 있다.

 

이와 같이 2의 보수법을 사용하면 덧셈만으로도 뺄셈 연산을 할 수 있게 되는 것이다.


6.유니코드
전 세계의 모든 문자를 다루도록 설계된 표준 문자 전산 처리 방식. 이것을 규율하는 단체는 유니코드 콘소시엄(Unicode Consortium)이다. 주요 구성 요소는 ISO/IEC 10646 Universal Character Set과 UCS, UTF 등의 인코딩 방식, 문자 처리 알고리즘 등이다. 전 세계의 모든 문자를 담는 ISO/IEC 10646 코드표를 사용함으로써, 각 언어와 문자 체계에 따른 충돌 문제를 해결하였다. 따라서 유니코드를 사용하면 한글 신자체·간체자, 아랍 문자 등을 통일된 환경에서 깨뜨리지 않고 사용할 수 있다.

초창기에는 문자 코드는 ASCII의 로마자 위주 코드였고, 1바이트의 남은 공간에 각 나라가 자국 문자를 할당하였었다. 하지만 이런 상황에서 다른 국가에 이메일을 보냈더니 글자가 와장창 깨졌던 것(...) 인터넷 웹페이지도 마찬가지였다. 이에 따라 2~3바이트의 넉넉한 공간에 세상의 모든 문자를 할당한 결과물이 이것이다. 다만 로마자(혹은 프로그래밍, url 등의 통신 포함) 입장에서는 용량이 두배가 되어 이래저래 비효율인 셈이 되어서, 가변길이 문자 인코딩(UTF-8)을 도입해서 기존 ASCII와 호환되는 규격도 도입했다. 흔히 우리가 웹 브라우저의 인코딩을 설정하면서 자주 보는 UTF-8이라는 말이 이것이고, 바로 유니코드에 기반한 인코딩 방식 중 하나를 가리키는 것이다.

현재의 유니코드는 지구상에서 통용되는 대부분의 문자들을 담고 있다. 여기에는 언어를 표기할 때 쓰는 문자는 물론, 악보 기호, 이모티콘, 태그, 마작이나 도미노 기호 같은 것들도 포함된다.

위의 프로그래밍은 type 별 특징에 따라 값을 입력하여 컴파일 한 화면이다.

그러하다 끝

반응형