使用 awk 将小数点移动 9 位(不能使用 gawk lshift)
Shift a decimal by 9 bits with awk (can't use gawk lshift)
我需要将十进制数左移 9 位并以十六进制打印结果。
举个例子:
# Desired result:
perl -e "printf('%x', (99 << 9))"; echo;
c600
# Use case:
awk 'BEGIN{ d=99; printf("Decimal: %d, Hexadecimal: %x\n", d, d }'
Decimal: 99, Hexadecimal: 63 # Must be left shift by 9 (c600)
你能给我一个重现这个的方法吗?
不需要 awk,您可以在 bash 中使用 printf
:
printf "%x\n" $((99 << 9))
c600
如果你必须使用 awk (gnu) 然后使用 lshift
函数:
awk 'BEGIN{printf "%x\n", lshift(99, 9)}'
c600
除非我们的精度有限,否则左移 9 等同于乘以 2^9=512:
$ awk 'BEGIN{ d=99; printf("Decimal: %d, Hexadecimal: %x\n", 512*d, 512*d) }'
Decimal: 50688, Hexadecimal: c600
$ awk 'BEGIN{ d=99; x=d*2^9; printf("Decimal: %d, Hexadecimal: %x\n", d, x )}'
Decimal: 99, Hexadecimal: c600
我需要将十进制数左移 9 位并以十六进制打印结果。
举个例子:
# Desired result:
perl -e "printf('%x', (99 << 9))"; echo;
c600
# Use case:
awk 'BEGIN{ d=99; printf("Decimal: %d, Hexadecimal: %x\n", d, d }'
Decimal: 99, Hexadecimal: 63 # Must be left shift by 9 (c600)
你能给我一个重现这个的方法吗?
不需要 awk,您可以在 bash 中使用 printf
:
printf "%x\n" $((99 << 9))
c600
如果你必须使用 awk (gnu) 然后使用 lshift
函数:
awk 'BEGIN{printf "%x\n", lshift(99, 9)}'
c600
除非我们的精度有限,否则左移 9 等同于乘以 2^9=512:
$ awk 'BEGIN{ d=99; printf("Decimal: %d, Hexadecimal: %x\n", 512*d, 512*d) }'
Decimal: 50688, Hexadecimal: c600
$ awk 'BEGIN{ d=99; x=d*2^9; printf("Decimal: %d, Hexadecimal: %x\n", d, x )}'
Decimal: 99, Hexadecimal: c600