gpt4 book ai didi

gawk - gawk 中的二进制数

转载 作者:行者123 更新时间:2023-12-05 05:28:13 32 4
gpt4 key购买 nike

如何在 gawk 中将一个数字指定为二进制数?

根据manual , gawk 将所有数字解释为十进制,除非它们前面有 0(八进制)或 0x(十六进制)。与某些其他语言不同,0b 无法解决问题。

例如,以下行没有给出所需的输出(01000010000),因为这些值分别被解释为八进制/十进制或十进制/十进制:

gawk '{print and(010000,110000)}'
0

gawk '{print and(10000,110000)}'
9488

我怀疑 gawk 可能不支持 base-2,并且需要用户定义的函数来生成二进制表示。

最佳答案

你说得对,gawk 内部不支持二进制转换。令人难以置信的是,printf() 中甚至没有任何内容。所以你被函数困住了。

记住 awk 是 weakly typed .这就是为什么函数有疯狂的行为,比如识别字符串开头的“0x”意味着它是一个十六进制数。在这样的语言中,最好控制自己的类型。

这是我多年来一直在使用的几个函数...

#!/usr/local/bin/gawk -f

function bin2dec(n) {
result = 0;
if (n~/[^01]/) {
return n;
}
for (i=length(n); i; i--) {
result += 2^(length(n)-i) * substr(n,i,1);
}
return result;
}

function dec2bin(n) {
result = "";
while (n) {
if (n%2) {
result = "1" result;
} else {
result = "0" result;
}
n = int(n/2);
}
return result;
}

{
print dec2bin( and(bin2dec($1),bin2dec($2)) );
}

结果:

$ echo "1101 1011" | ./doit.awk
1001
$ echo "11110 10011" | ./doit.awk
10010
$

关于gawk - gawk 中的二进制数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13095906/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com