본문 바로가기
Technology/by Lab

[매트랩 맨띵] Matlab으로 2의 보수 구하기

by 밝은생각쟁이 2013. 4. 19.
728x90
반응형

아...............................

진짜 ㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜ

별것도 아니면서 하루종일 고민하다가 결국엔 함수 만들었음.

 

%% 2의 보수
% a = matrix 형태로 된 binary 값
% factor = scale factor , 기본은 "1"

 

function value = twocomp (a ,factor)
% MSB(a(1), 최상위비트)가 0일 때 양수 이므로 그대로 10진수로 변환 
  if a(1) == 0
    value =  sum( a .* 2.^[ factor+length(a)-1 : -1 : factor ])
% MSB(a(1), 최상위비트)가 1일 때 음수
% 1의 보수를 취한 후 1을 더하고 음수를 취함. 
  else
     a = (1 - a ) ;
     a(length(a)) = a(length(a)) + 1 ;
     a(1) = [] ;
     value =  - sum( a .* 2.^[ factor+length(a)-1 : -1 : factor ])
 end
end

 

 

그리고 이런 식으로 사용함.

 Crs= bi2de(SF(2, 84:-1:69)) ; % 2진수로 되어 있는 매트릭스(matrix)를 10진수로 변환 ,  유의할 것은 뒤에 있는 비트부터 끌어와야 하기 때문에 "-1"씩 감소하고 있다는 거,
 delta_n= twocomp(SF(2, 69:84) , -43).*pi ;  % 2의 보수를 취한 것에 pi를 곱해줌. 여기서 '-43"의 의미는 scale factor가 2^(-43) 라는 의미. tow's Complement 는 앞에 있는 비트부터 끌어오게 정했음.
 M=  twocomp( [ SF(2, 107:114) SF(2, 121:144)], -31) .*pi ;
 Cuc= twocomp( SF(2, 151:166), -29) ;

 

 

너무 허접하고 민망하지만, 누군가에게는 도움이 되길.

 

 

아. 그리고 매트랩에서 함수 쓰는 방법은, (이것도 방금 알았음 ;;; )

 

매트랩 파일 제일 위에

function value = 함수이름 ( 변수 , 등등 )

쓰고 저장한 후 같은 폴더 안에 두면 됨.

 

 

728x90
반응형