티스토리 뷰

1047.

정수 1개를 입력받아 2배 값을 출력해보자.

(비트단위 시프트 연산자 <<, >>를 사용하자.)

 

✔ insight.

2진수 값을 왼쪽(<<) 이나 오른쪽(>>)으로 지정한 비트 수만큼 밀어주면 10진수의 값은 2배씩 늘어나거나 반으로 줄어든다.

왼쪽 비트시프트(<<)가 될 때에는 오른쪽에 0이 주어진 개수만큼 추가되며, 오른쪽 비트시프트(>>)의 경우, 0이나 양수라면 왼쪽에 0, 음수라면 왼쪽에 1이 개수만큼 추가된다. 그리고 범위(32비트)를 넘어서 이동되는 비트는 삭제된다.

 

즉, 10진수일 때를 기준으로 말하면 왼쪽 비트 시프트(<<) 는 2배, 오른쪽 비트 시프트(>>)는 1/2배의 연산을 수행한다.

 

(예)

int a = 10;

printf("%d", a<<1);   //20

printf("%d", a>>1);   //5

printf("%d", a<<2);   //40

prinft("%d", a>>2);   //2 (결과는 2.5지만 형식 지정자가 정수형이므로)

 

 

입력. 1024
출력. 2048
#include <stdio.h>

int main(void){
  int num;
  scanf("%d", &num);
  printf("%d",num<<1);
  return 0;
}

 

1048.

정수 2개(a, b)를 입력받아 a에 2^b 곱한 값으로 출력해보자.

(0 <= a <= 10, 0 <= b <= 10)

 

✔ insight.

2의 n제곱 값을 알고 싶다면, 1<<n을 사용하면 되는데, 원리는 아래와 같다.왼쪽 비트 연산자 << 는 먼저 비트 연산자가 적용될 값을 2진수로 바꾸고, 오른쪽에 n개만큼 0을 추가한다. 1에 비트 연산자 << 를 사용하면 2진수는 자릿수가 하나씩 늘어나므로, 곧 2의 n제곱의 형태를 가진다.

 

  n 2진수 2진수 → 10진수 10진수
1 - 1    (2^0)*0 1
1<<1 1 10    (2^1)*1 + (2^0)*0 2
1<<2 2 100    (2^2)*1 + (2^1)*0 + (2^0)*0 4
1<<3 3 1000    (2^3)*1 + (2^2)*0 + (2^1)*0 + (2^0)*0 8

즉, 임의의 정수 a에 2의 n제곱을 곱한 값을 알고 싶다면, a*(1<<b) 라는 식을 사용해 확인할 수 있다.

 

 

입력. 1 3
출력. 8
#include <stdio.h>

int main(void){
  int a,b;
  scanf("%d %d",&a,&b);
  printf("%d",a*(1<<b));
  return 0;
}

 

1049. 

두 정수(a, b)를 입력받아 a가 b보다 크면 1을, a가 b보다 작거나 같으면 0을 출력하는 프로그램을 작성해보자.

(-2147483648 <= a, b <= +2147483647)

 

입력. 9 1
출력. 1
#include <stdio.h>

int main(void){
  int a,b;
  scanf("%d %d",&a,&b);
  if(a>b){
  	printf("%d",1);
  }else{
  	printf("%d",0);
  }
  return 0;
}

 

1050. 

두 정수(a, b)를 입력받아 a와 b가 같으면 1을, 같지 않으면 0을 출력하는 프로그램을 작성해보자.

(-2147483648 <= a, b <= +2147483647)

 

입력. 0 0
출력. 1
#include <stdio.h>

int main(void){
  int a,b;
  scanf("%d %d",&a,&b);
  if(a==b){
  	printf("%d",1);
  }else{
  	printf("%d",0);
  }
  return 0;
}

 

1051.

두 정수(a, b)를 입력받아 b가 a보다 크거나 같으면 1을, 그렇지 않으면 0을 출력하는 프로그램을 작성해보자.

(-2147483647 <= a, b <= +2147483648)

 

입력. 0 -1
출력. 0
#include <stdio.h>

int main(void){
  int a,b;
  scanf("%d %d",&a,&b);
  if(a<=b){
  	printf("%d",1);
  }else{
  	printf("%d",0);
  }
  return 0;
}

 

1052.

두 정수(a, b)를 입력받아 a와 b가 서로 다르면 1을, 그렇지 않으면 0을 출력하는 프로그램을 작성해보자.

(-2147483647 <= a, b <= +2147483648)

 

입력. 0 1
출력. 1
#include <stdio.h>

int main(void){
  int a,b;
  scanf("%d %d",&a,&b);
  if(a!=b){
  	printf("%d",1);
  }else{
  	printf("%d",0);
  }
  return 0;
}

 

댓글
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
최근에 올라온 글
글 보관함
Total
Today
Yesterday