-
-
Notifications
You must be signed in to change notification settings - Fork 4.5k
[feat/fix/docs]: Improved on conversion code , length variable , asserts added #840
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from 5 commits
67eeefe
0008c67
7185941
6e5e561
905b80c
e771021
157f6d1
bbb6024
82e1f41
1e4c396
166dc0b
57bcffa
129f4b0
8526600
61bed00
4d91c9d
8defb93
6397733
45e4eff
6553640
09df4a4
63cf38c
e078df2
0b199fb
f66cd1b
fd82d9e
ebf83bb
63a9a16
a2ca660
81ab47c
0f96de5
254cabf
8c1b548
8632490
8fa92c5
4ab5a25
da73878
71c17ee
c3433f7
53e719b
af4b346
aa8e55b
0d61a4a
82fb3ae
9612325
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,24 +1,94 @@ | ||
/** | ||
* Modified 07/12/2017, Kyler Smith | ||
* | ||
*/ | ||
* A C code to convert a binary number to a decimal one. | ||
* Modified 07/12/2017, Kyler Smith | ||
* Modified 2021 lazy-dude | ||
*/ | ||
|
||
#include <assert.h> | ||
#include <stdbool.h> | ||
#include <stdint.h> | ||
#include <stdio.h> | ||
#include <stdlib.h> | ||
|
||
int main() | ||
/** | ||
* function prototypes | ||
*/ | ||
bool is_binary(intmax_t num); | ||
int num_len(intmax_t num); | ||
intmax_t binary_decimal(intmax_t num); | ||
void test(void); | ||
|
||
int main(void) | ||
{ | ||
test(); | ||
lazy-dude marked this conversation as resolved.
Show resolved
Hide resolved
|
||
printf("All tests passed.\n"); | ||
return 0; | ||
} | ||
|
||
/** | ||
* is_binary checks whether num is a binary one | ||
*/ | ||
bool is_binary(intmax_t num) | ||
{ | ||
int remainder, number = 0, decimal_number = 0, temp = 1; | ||
printf("\n Enter any binary number= "); | ||
scanf("%d", &number); | ||
int remainder = 0; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Consider using There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. uintmax_t has the biggest length for machine running the code. I would prefer it over uint64_t which has a fixed size. |
||
|
||
while (num > 0) { | ||
remainder = num % 10; | ||
if (remainder == 0 || remainder == 1) { | ||
num /= 10; | ||
continue; | ||
} else | ||
return false; | ||
} | ||
return true; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Please add a bit of documentation here of what this code does. |
||
} | ||
|
||
/** | ||
* num_len finds length of an intmax_t num | ||
*/ | ||
int num_len(intmax_t num) | ||
{ | ||
int i; | ||
lazy-dude marked this conversation as resolved.
Show resolved
Hide resolved
|
||
for (i = 0; num > 0; i++) { | ||
num /= 10; | ||
} | ||
return i; | ||
} | ||
|
||
/** | ||
* binary_decimal function does the actual job of conversion | ||
*/ | ||
intmax_t binary_decimal(intmax_t number) | ||
{ | ||
intmax_t remainder, decimal_number = 0, temp = 1; | ||
|
||
int length = num_len(INTMAX_MAX) - 1; | ||
|
||
assert(number>=0); | ||
assert(num_len(number) <= length); | ||
assert(is_binary(number)); | ||
|
||
// Iterate over the number until the end. | ||
while (number > 0) | ||
{ | ||
while (number > 0) { | ||
remainder = number % 10; | ||
number = number / 10; | ||
decimal_number += remainder * temp; | ||
temp = temp * 2; // used as power of 2 | ||
temp = temp * 2; // used as power of 2 | ||
} | ||
|
||
printf("%d\n", decimal_number); | ||
return decimal_number; | ||
} | ||
|
||
/** | ||
* some tests using assert | ||
*/ | ||
void test(void) | ||
lazy-dude marked this conversation as resolved.
Show resolved
Hide resolved
|
||
{ | ||
assert(binary_decimal(0)==0); | ||
assert(binary_decimal(1)==1); | ||
assert(binary_decimal(1110001)==113); | ||
assert(binary_decimal(11111111)==255); | ||
assert(binary_decimal(10000000000)==1024); | ||
assert(binary_decimal(1001110100000100)==40196); | ||
lazy-dude marked this conversation as resolved.
Show resolved
Hide resolved
|
||
} | ||
|
||
Panquesito7 marked this conversation as resolved.
Show resolved
Hide resolved
|
Uh oh!
There was an error while loading. Please reload this page.