开发者

binary to decimal in objective-c

开发者 https://www.devze.com 2023-02-24 09:20 出处:网络
I want to convert the decimal number 27 into binary such a way that , 开发者_如何学Gofirst the digit 2 is converted and its binary value is placed in an array and then the digit 7 is converted and it

I want to convert the decimal number 27 into binary such a way that , 开发者_如何学Gofirst the digit 2 is converted and its binary value is placed in an array and then the digit 7 is converted and its binary number is placed in that array. what should I do? thanks in advance


That's called binary-coded decimal. It's easiest to work right-to-left. Take the value modulo 10 (% operator in C/C++/ObjC) and put it in the array. Then integer-divide the value by 10 (/ operator in C/C++/ObjC). Continue until your value is zero. Then reverse the array if you need most-significant digit first.


If I understand your question correctly, you want to go from 27 to an array that looks like {0010, 0111}.

If you understand how base systems work (specifically the decimal system), this should be simple.

First, you find the remainder of your number when divided by 10. Your number 27 in this case would result with 7. Then you integer divide your number by 10 and store it back in that variable. Your number 27 would result in 2.

How many times do you do this?

You do this until you have no more digits. How many digits can you have? Well, if you think about the number 100, it has 3 digits because the number needs to remember that one 10^2 exists in the number. On the other hand, 99 does not.

The answer to the previous question is 1 + floor of Log base 10 of the input number.

Log of 100 is 2, plus 1 is 3, which equals number of digits. Log of 99 is a little less than 2, but flooring it is 1, plus 1 is 2.

In java it is like this:

int input = 27;
int number = 0;
int numDigits = Math.floor(Log(10, input)) + 1;
int[] digitArray = new int [numDigits];

for (int i = 0; i < numDigits; i++) {
    number = input % 10;
    digitArray[numDigits - i - 1] = number;
    input = input / 10;
}

return digitArray;

Java doesn't have a Log function that is portable for any base (it has it for base e), but it is trivial to make a function for it.

double Log( double base, double value ) {
    return Math.log(value)/Math.log(base);
}

Good luck.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号