ANSWERS TO NUMBER REPRESENTATION EXERCISES 1. First convert to binary: 7654 = 111 110 101 100 = 1111 1010 1100 = FAC 2. 7*8^3 + 6*8^2 + 5*8 + 4 = 7*512 + 6*64 + 40 + 4 = 4012 3. 7654 decimal is 16746 octal 8^4 = 4096 7654 - 1*4096 = 3558 8^3 = 512 3558 - 6*512 = 486 8^2 = 64 486 - 7*64 = 38 8^1 = 8 38 - 4*8 = 6 8^0 = 1 6 - 6*1 = 0 4. Shortcut: convert the octal from exercise 3 to binary (see exercise 1). 1110111100110 5. #include <stdio.h> int main(void) { int n; scanf("%d", &n); printf("%o\n", n); return 0; } 6. #include <stdio.h> int main(void) { int n; scanf("%o", &n); printf("%d\n", n); return 0; } 7. #include <stdio.h> int main(void) { float x, y; scanf("%f %f", &x, &y); printf("%.2f\n", x / y); return 0; } 8. #include <stdio.h> int main(void) { double x, y; scanf("%lf %lf", &x, &y); printf("%.2f\n", x / y); return 0; } 9. #include <stdio.h> int main(void) { int x, y; scanf("%d %d", &x, &y); printf("%.2f\n", (double) x / y); return 0; } Note: the cast is needed to prevent integer division. Casting has higher precedence than division so x is promoted to a double before the division. An alternative is 1.0 * x / y. 10. The number of bits in the binary representation of a positive integer n is the smallest integer greater than or equal to log_2 (n+1). int f(int n) { int i = 1, log2i = 0; while (i < n + 1) { i += i; log2i++; } return log2i; } 11. The following results were obtained on arizona. yuma.Princeton.EDU% gcc floating-point.c yuma.Princeton.EDU% a.out x != 0.3 This may come as quite a surprise, but floating point numbers are not represented exactly in C (nor in most other programming languages). Testing for exact equality is usually a bad idea.