'Computer Science/Base Logic'에 해당되는 글 2

  1. 2011.04.14 vim 정규식 표현 예제 #01
  2. 2008.04.01 2의 보수에 대한 이해

vim 정규식 표현 예제 #01

vim에서 정규 표현식 (Regular Expression)을 이용해서,
"xxx"로 시작하는 단어를 찾은 후 변경하기

int Test(int _hello)
{
return _hello;
}

:%s/\<[_]\([a-z]\)/n\U\1/g

%s > 문서전체 대상으로 
\<[_] > 단어의 첫번째 문자가 '_' 로 시작하는 단어 
\([a-z]\) '_' 다음에 처음 문자가 영문 소문자인 경우의 그룹 지정 
n 은 그냥 붙이고 싶은 문자
\U 는 대문자로 변경하고 싶다는 것
\1 첫번째 그룹대상의 글자들


대강 그래요... 그래서 결과는 다음과 같죠

int Test(int nHello)
{
return nHello;


입니다......... 

2의 보수에 대한 이해

일반 프로그램이나 컴퓨터에서 음수의 표현은 하이픈(-) 을 숫자에 앞에 붙이는 것으로
표현한다.

하지만  기계어 수준으로 내려간다면 단순히 0과1로 구성된 이진수 체계로 구성되어 있는데,
이때는 하이픈(-)이라는 표시를 어떻게 표현해야할까?

기계어 수준에서는 2의 보수라는 것을 이용한다.

예를들어, 5 의 경우 2의 보수는. 다음과 같은 과정을 거친다.

(1) 일단 1의 보수를 만들고

    5의 이진수는 0000000000000101(2)
    위의 값을 0은 1로, 1은 0으로 바꾸는 것으로 1의 보수화를 한다.
    결과는 따라서
1111111111111010(2)

(2) 1의 보수에 1을 더한다.

    5에대한 1의 보수 + 1
    = 1111111111111010(2) + 1(2)
    = 1111111111111011(2)

(3) 5에 대한 2의 보수를 구했다.

    1111111111111011(2) 가 5에 대한 2의 보수이다.

(4) 5에 대한 2의 보수와 5의 이진수 값을 더하면, 마이너스와 같은 역할을 한다.

    0000000000000101(2) + 1111111111111011(2)
    = 1000000000000000(2)

(5) 최상휘 비트에 대한 올림의 경우 해당 변수의 영역을 넘어섬으로,
    무시된다.

어떤가 알고나니 신기하지 않은가....? ^^