여기에서 명령줄 계산기와 설명서를 사용하여 계산을 수행하는 방법을 읽었지만, 그럼에도 불구하고 예상한 결과를 얻지 못하고 오류를 찾을 수 없습니다. 셸에서 수행한 작업은 다음과 같습니다.
bc << HERE
>ibase=2
>obase=16
>1001
>HERE
100
2진수 1001은 16진수 9이므로 결과적으로 9가 나올 것으로 예상했는데 100이 나왔습니다.
답변1
입력 베이스를 먼저 설정하고 출력 베이스를 설정하면 16은 입력 베이스(2)로 해석됩니다. 이 경우 6
in은 16
단순히 이진수 비트로 해석되는 것처럼 보이 1
므로 출력 베이스는 이진수 11 또는 십진수 3으로 설정됩니다.
이 문제를 해결하려면 입력 베이스를 설정하기 전에 출력 베이스를 설정할 수 있습니다.
echo 'obase=16; ibase=2; 1001' | bc
답변2
먼저 설정 했기 때문에 다음을 ibase=2
사용해야 합니다 obase=10000
.
$ echo 'ibase=2; obase=10000; 1001' | bc
9
답변3
[io]base=
현재 입력 기반을 기반으로 선언을 항상 인수분해할 수 있지만,다른여러분이 할 수 있는 일은 명시적인 16진수 표기법을 사용하는 것 뿐이며 입력 기준에 관계없이 작동해야 합니다. 이와 같이:
printf %s\\n ibase=2 obase=F 1001 | bc
...인쇄...
9
입력 기수를 설정할 때 길을 잃은 경우 다음과 같이 항상 간단한 기수 10으로 쉽게 되돌릴 수 있으므로 이 기능이 특히 유용할 수 있습니다.
ibase=A
이것은 표준화된 구문입니다.POSIX에 의해 시행됨:
ibase
또는obase
목록에서 단일 숫자 값이 할당되는 경우어휘 규칙에서는bc
값이 16진수로 가정되어야 합니다.(예를 들어ibase=A
현재ibase
값과 관계없이 10진수로 설정합니다.)ibase
그렇지 않으면 값보다 크거나 같은 숫자가 입력에 나타날 때 동작이 정의되지 않습니다. 합계의ibase
초기 값obase
은 10입니다.
시작된 역사적인 회의입니다.dc
(일부 시스템에서는 bc
여전히 프런트엔드에 지나지 않습니다.)그래서...
echo 2i Fo 1001p|dc
...또한 인쇄됩니다...
9