-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathassignment3.c
76 lines (38 loc) · 1.41 KB
/
assignment3.c
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <stdio.h>
#include <math.h>
#pragma warning(disable:4996)
int main() {
int h, i, j, k, n ;
printf("기준 정수값을 입력하시오 : ");
scanf("%d", &n);
getchar();
/*int 정수값은 2의 31승 - 1의 절댓값 사이의 값이지만,
문제에서 제시된 조건은 i,k의 범위만 예외 처리. */
do {
printf("정수 i와 k값을 입력하시오 (i와 k는 1이상 32이하로 입력) : ");
scanf("%d%d", &i, &k);
} while (i > 32 || k > 32 || i<=0 || k<=0 );
/*비트 값은 32자리 이상은 안됨.
또한 구하고자 하는 비트 위치가 음수여도 안됨
첫번째 값은 음양을 따지기 위한 위치*/
j = pow(2, i - 1);
h = pow(2, k - 1);
if ((n | j) == n) {
printf("%d의 %d번째의 비트 값은 1 입니다.\n", n, i);
}
else {
printf("%d의 %d번째의 비트 값은 0 입니다.\n", n, i);
}
//비트로 i번째 값을 1로 바꾸었을 때 값이 안바뀌면 1 바뀌면 0
printf("%d의 %d번째 비트값을 1로 바꾼 값은 %d 입니다.", n, k, n | h);
//k번의 비트값을 1로 바꾼다는 것은 2의 k-1승을 or로 넣어주면 된다
return 0;
}
/*기준 정수 값을 하나 입력 받는다. 입력 받은 정수를 2진수로 표현한다고 가정하였을 때,
다음 두 가지 기능을 수행하는 프로그램을 완성한다.
정수 i 와 k 값을 입력 받음
i 번째 bit의 값이 0인지 1인지 출력
k 번째 bit를 무조건 1로 변환하였을 때 바뀐 값을
10진수로 출력
입력 받은 기준 정수 값의 Bit 범위를 벗어나는 i 또는 k 값을 입력 받았을 때 예외처리를 보여주면 가산 점.
*/