분수를 이진수로 어떻게 변환합니까?
1/10(decimal) = 0.0001100110011... (binary)
어떻게하나요? 바이너리로 변환 한 다음 나누기로되어 있습니까? 누군가 보여줄 수 있습니까?
대학에서는 이렇게 배웠습니다.
- 2 곱하기
- 십진수를 숫자로 사용
- 다음 단계의 시작점으로 분수를 취하십시오
- 0 또는 주기적 숫자가 될 때까지 반복하십시오.
- 맨 위에서 시작하는 숫자 읽기-첫 번째 결과는 쉼표 뒤의 첫 번째 숫자입니다.
예:
0.1 * 2 = 0.2 -> 0
0.2 * 2 = 0.4 -> 0
0.4 * 2 = 0.8 -> 0
0.8 * 2 = 1.6 -> 1
0.6 * 2 = 1.2 -> 1
0.2 * 2 = 0.4 -> 0
0.4 * 2 = 0.8 -> 0
0.8 * 2 = 1.6 -> 1
0.6 * 2 = 1.2 -> 1
Result: 0.00011(0011) periodic.
1 1 -(12 월) = ---- (빈) 10 1010 0.000110011 ... ------------- 1010 | 1.0000000000 1010 년 ------ 01100 1010 년 ----- 0010000 1010 년 ----- 01100 1010 년 ----- 0010
다소 혼란 스러울 수 있지만 이진수의 소수점 자리는 2의 거듭 제곱의 역수를 나타냅니다 (예 : 소수점 첫째 자리, 둘째 자리, 셋째 자리 및 넷째 자리에 대해 1/2, 1/4, 1/8, 1/16, 각각) 소수에서와 마찬가지로 소수 자리는 10의 연속적인 거듭 제곱의 역수를 나타냅니다.
질문에 답하려면 1/10을 더하기 위해 2의 거듭 제곱의 역수를 더해야하는 것을 알아 내야합니다. 예를 들면 :
1/16 + 1/32 = 0.09375로 1/10에 매우 가깝습니다. 1/128과 마찬가지로 1/64를 더하면 끝납니다. 하지만 1/256은 우리를 더 가깝게 만듭니다. 그래서:
0.00011001 이진수 = 0.09765625 십진수, 요청한 것에 가깝습니다.
계속해서 더 많은 숫자를 추가 할 수 있으므로 답은 0.00011001이됩니다.
방법을 생각하는 방법은 다음과 같습니다.
Each time you multiply by 2, you are shifting the binary representation of the number left 1 place. You have shifted the highest digit after the point to the 1s place, so take off that digit, and it is the first (highest, therefore leftmost) digit of your fraction. Do that again, and you have the next digit.
Converting the base of a whole number by dividing and taking the remainder as the next digit is shifting the number to the right. That is why you get the digits in the opposite order, lowest first.
This obviously generalizes to any base, not just 2, as pointed out by GoofyBall.
Another thing to think about: if you are rounding to N digits, stop at N+1 digits. If digit # N+1 is a one, you need to round up (since digits in binary can only be a 0 or 1, truncating with the next digit a 1 is as inaccurate as truncating a 5 in decimal).
Took me a while to understand @Femaref ('s) answer so thought I would elaborate.
Elboration
You want to convert decimal 1/10
which equal 0.1
to binary. Start with 0.1
as your input and follow these steps:
- Multiply input by 2 (mult column)
- Take decimal from answer (answer column) as the digit (binary column)
- Take the fraction (fraction column) as the input for the next step
- Repeat steps 1, 2 and 3 until you either get to 0 or a periodic number. The start of periodic number in this case is shown in last column so we can stop there. But I continued to show the repetition for clarity.
- The answer is the numbers taken from the binary column starting at the top.
In this case it is:
0.00011(0011) Note: numbers within parenthesis will keep repeating (periodic)
+-------+-------+--------+---------+----------+--------+----------------------+
| input | mult | answer | decimal | fraction | binary | |
+-------+-------+--------+---------+----------+--------+----------------------+
| 0.1 | 2 | 0.2 | 0 | .2 | 0 | |
| 0.2 | 2 | 0.4 | 0 | .4 | 0 | |
| 0.4 | 2 | 0.8 | 0 | .8 | 0 | |
| 0.8 | 2 | 1.6 | 1 | .6 | 1 | |
| 0.6 | 2 | 1.2 | 1 | .2 | 1 | |
| 0.2 | 2 | 0.4 | 0 | .4 | 0 | |
| 0.4 | 2 | 0.8 | 0 | .8 | 0 | |
| 0.8 | 2 | 1.6 | 1 | .6 | 1 | |
| 0.6 | 2 | 1.2 | 1 | .2 | 1 | < Repeats after this |
| 0.2 | 2 | 0.4 | 0 | .4 | 0 | |
| 0.4 | 2 | 0.8 | 0 | .8 | 0 | |
| 0.8 | 2 | 1.6 | 1 | .6 | 1 | |
| 0.6 | 2 | 1.2 | 1 | .2 | 1 | |
+-------+-------+--------+---------+----------+--------+----------------------+
ReferenceURL : https://stackoverflow.com/questions/4987176/how-do-you-convert-a-fraction-to-binary
'developer tip' 카테고리의 다른 글
UITableView에서 첫 번째 행을 기본값으로 선택하십시오. (0) | 2021.01.10 |
---|---|
NSMutableArray에서 요소 교체 (0) | 2021.01.10 |
별도의 하위 디렉토리에 개체 파일을 배치하는 방법 (0) | 2021.01.10 |
NewtonSoft를 사용하여 한 줄로 JSON 개체 생성 (0) | 2021.01.10 |
두 범위 함수 결과 연결 (0) | 2021.01.10 |