-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtwos.c
More file actions
74 lines (59 loc) · 1.52 KB
/
twos.c
File metadata and controls
74 lines (59 loc) · 1.52 KB
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
// PID: 730401749
// I pledge the COMP211 honor code.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
void setDefaultTo (char origin[], char tar);
int power2 (int power);
int main (int argc, char *argv[]){
char binary[16];
char numString[1000];
int len = strlen(argv[1]);
char sign = argv[1][0];
int startVal = 0;
char zero = 48;
char one = 49;
setDefaultTo(binary, zero);
for (int i=1; i<len; i++)
numString[i-1] = argv[1][i];
int count = atoi(numString);
int num = count;
if (count>32767 || count<-32768){
printf("The two's complement 16-bit representation of %c%d is: not possible.\n", sign, count);
return EXIT_SUCCESS;
}
binary[0] = (sign == 45 && num!=0) ? 49 : 48;
if (sign == 45 && num != 0) {
setDefaultTo(binary, one);
startVal = 1;
zero = 49;
one = 48;
}
num = num - startVal;
for (int i=15; i>0; i--) {
int power2Val = power2(i-1);
binary[16-i] = (power2Val<=num) ? one : zero;
num = (binary[16-i]==one) ? (num-power2Val) : num;
}
printf("The two's complement 16-bit representation of %c%d is: ", sign, count);
for (int i=0; i<16; i++)
printf("%c", binary[i]);
printf(".\n");
return EXIT_SUCCESS;
}
void setDefaultTo (char origin[], char tar) {
if (tar==48) {
for (int i=0; i<16; i++)
origin[i] = 48;
} else {
for (int i=0; i<16; i++)
origin[i] = 49;
}
}
int power2 (int power) {
int power2 = 1;
for (int j=power; j>0; j--)
power2 = 2*power2;
return power2;
}