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,输入和输出都是十六进制的)