c언어ch04-4

암영·2022년 4월 23일
0

c언어

목록 보기
1/21

비트연산의 이해

문제1
입력받은 정수값의 부호를 바꿔서 출력하는 프로그램을 작성해보자. 예를 들어서 -3이 입력되면 3이 출력되어야하고 5가 입력되면 -5가 출력되어야한다. 단! 반드시 비트연산자를 이용하여 구현해야 한다.

문제2
다음연산의 결과를 구현하는 프로그램을 작성해보자 단 *연산자와 / 연산자를 사용하지 않고 구현해야 한다.
3x8÷4
물론 중간과정을 생략하거나 적절히 암산하지 않고 반드시 곱셉에 대응하느 연산과 나눗셈에 대응하는 연산을 거쳐서 해결해야 한다.

정답

1번

내가쓴것(맞음)

#include <stdio.h>
int main (void){
int num;
printf("숫자를 입력하시오");
scanf_s("%d",&num);

int result=~num+1;
printf("%d 의 부호를 바꾸어 출력한 결과:%d",num,result);
return 0;
}

정답

2번

내가쓴거(틀린)

#include <stdio.h>
int main(){
int num1=3;
result=num1<<3; //num1을 오른쪽으로 3칸이동한다는 뜻
result=num1>>2; //num1을 왼쪽으로 2칸 이동한다는 뜻
printf("3x8÷4 의 연산결과는 %d이다.",result);
return 0;
}

이렇게 하면 연산결과가 0이 나온다 왜일까..?

num1<<3이 4행의 result에 저장되었으므로, 5행에서는 result=result>>2를 해야한다. num1은 여전히 3인데 거기에다가 ㅜㅕㅡ1>>2를 해버리면 0이 나오는게 당연하다.

틀린거 수정본 이렇게 써야 답이 나온다..!

#include <stdio.h>
int main() {
	int num1 = 3;
	int result;
	result = num1 << 3; //num1을 오른쪽으로 3칸이동한다는 뜻
	result = result >> 2; //num1을 왼쪽으로 2칸 이동한다는 뜻
	printf("3x8÷4 의 연산결과는 %d이다.", result);
	return 0;
}

정답(답지)

#include <stdio.h>
int main() {
	int num1 = 3;
	num1 = num1 << 3; //num1을 오른쪽으로 3칸이동한다는 뜻
	num1 = num1 >> 2; //num1을 왼쪽으로 2칸 이동한다는 뜻
	printf("3x8÷4 의 연산결과는 %d이다.", num1);
	return 0;
}
profile
just do! -얼레벌레 굴러가는 공대생

0개의 댓글