티스토리 뷰
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;
}
'Computer Science > 코드업' 카테고리의 다른 글
[코드업 기초 100제-C언어] 1059-1070 (0) | 2021.02.19 |
---|---|
[코드업 기초 100제-C언어] 1053-1058 (0) | 2021.02.14 |
[코드업 기초 100제-C언어] 1038-1046 (0) | 2021.02.11 |
[코드업 기초 100제-C언어] 1031-1037 (0) | 2021.02.11 |
[코드업 기초 100제-C언어] 1028-1030 (0) | 2021.02.11 |