使用awk将小数位移9位(不能使用gawk lshift)

时间:2016-08-09 20:57:26

标签: bash awk hex printf shift

我需要左移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)

你能给我一个重现这个的方法吗?

3 个答案:

答案 0 :(得分:2)

除非我们的精度有限,否则左移9乘以乘以2 ^ 9 = 512:

$ awk 'BEGIN{ d=99; printf("Decimal: %d, Hexadecimal: %x\n", 512*d, 512*d) }'
Decimal: 50688, Hexadecimal: c600

答案 1 :(得分:2)

$ awk 'BEGIN{ d=99; x=d*2^9; printf("Decimal: %d, Hexadecimal: %x\n", d, x )}'
Decimal: 99, Hexadecimal: c600

答案 2 :(得分:1)

不需要awk,你可以使用printf在bash中执行此操作:

printf "%x\n" $((99 << 9))
c600

如果必须使用awk(gnu),请使用lshift函数:

awk 'BEGIN{printf "%x\n", lshift(99, 9)}'
c600