문제1
입력받은 정수값의 부호를 바꿔서 출력하는 프로그램을 작성해보자. 예를 들어서 -3이 입력되면 3이 출력되어야하고 5가 입력되면 -5가 출력되어야한다. 단! 반드시 비트연산자를 이용하여 구현해야 한다.문제2
다음연산의 결과를 구현하는 프로그램을 작성해보자 단 *연산자와 / 연산자를 사용하지 않고 구현해야 한다.
3x8÷4
물론 중간과정을 생략하거나 적절히 암산하지 않고 반드시 곱셉에 대응하느 연산과 나눗셈에 대응하는 연산을 거쳐서 해결해야 한다.
#include <stdio.h>
int main (void){
int num;
printf("숫자를 입력하시오");
scanf_s("%d",&num);
int result=~num+1;
printf("%d 의 부호를 바꾸어 출력한 결과:%d",num,result);
return 0;
}
#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;
}