Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash Unix BC“;bc-l“;等于;。8“;而不是",;“A”,为什么?_Bash_Unix_Hex_Bc - Fatal编程技术网

Bash Unix BC“;bc-l“;等于;。8“;而不是",;“A”,为什么?

Bash Unix BC“;bc-l“;等于;。8“;而不是",;“A”,为什么?,bash,unix,hex,bc,Bash,Unix,Hex,Bc,当运行时bc-l 如果您将ibase=obase=16,则要求“0.2*5” 等于0.8。为什么它不等于十六进制值1 我最初在这里问这个问题()。0.2(十进制)-->0.1(十六进制) 0.5(十进制)-->0.8(十六进制) 因此,我认为正在发生的是: 十六进制输入(0.1*5),以十进制(以10为基数)输出为0.5,以十六进制(以16为基数)输出为(0.8)我认为问题在于,您是以十六进制输入,但它是以十进制进行内部计算,并使用十六进制输入的长度来决定数字应表示为多少个十进制数字。因此,当您

当运行时
bc-l

如果您将ibase=obase=16,则要求“0.2*5”

等于0.8。为什么它不等于十六进制值1

我最初在这里问这个问题()。

0.2(十进制)-->0.1(十六进制)

0.5(十进制)-->0.8(十六进制)

因此,我认为正在发生的是:


十六进制输入(0.1*5),以十进制(以10为基数)输出为0.5,以十六进制(以16为基数)输出为(0.8)

我认为问题在于,您是以十六进制输入,但它是以十进制进行内部计算,并使用十六进制输入的长度来决定数字应表示为多少个十进制数字。因此,当您输入“0.2”(十六进制)时,它会将其转换为最接近的1位小数,即0.1(十进制)。乘以5,得到0.5(十进制)=0.8(十六进制)


您可以通过强制它使用更多的十进制数字来看到这一点。如果执行“0.20*5”,则将0.20(十六进制)转换为0.12(十二进制),将其乘以12得到0.60(十二进制),输出将四舍五入为0.99(十六进制)。如果你做“0.200*5”,它将0.200(十六进制)转换为0.125(十进制),乘以5得到0.625(十进制),这将转换为0.A00(十六进制),这是“正确”的结果。

是的,看起来bc中的所有计算都是十进制的(而根据我的ibase和obase,输入和输出都是十六进制的)