Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.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
gawk中的二进制数_Gawk_Radix - Fatal编程技术网

gawk中的二进制数

gawk中的二进制数,gawk,radix,Gawk,Radix,如何在gawk中将数字指定为二进制 根据gawk将所有数字解释为十进制,除非它们前面有一个0(八进制)或一个0x(十六进制)。与某些其他语言不同,0b不起作用 例如,以下行没有给出所需的输出(010000或10000),因为这些值分别被解释为八进制/十进制或十进制/十进制: gawk '{print and(010000,110000)}' 0 gawk '{print and(10000,110000)}' 9488 我怀疑gawk可能不支持base-2,并且生成二进制表示将需要用户定义的

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

根据gawk将所有数字解释为十进制,除非它们前面有一个
0
(八进制)或一个
0x
(十六进制)。与某些其他语言不同,
0b
不起作用

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

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

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

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

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

请记住,awk是。这就是为什么函数会有疯狂的行为,比如识别字符串开头的“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
$