【问题标题】:Make Perl Script to Compute Two's Complement on An 8-Bit Integer [duplicate]制作 Perl 脚本以计算 8 位整数的补码 [重复]
【发布时间】:2016-03-18 20:30:07
【问题描述】:

我编写了一个 Perl 脚本,它接受输入的十六进制值,然后返回等效的二进制值。我需要签署那个 8 位整数并查看有符号整数的值。我看到的 Perl 文档中似乎没有涵盖这种特殊情况。脚本粘贴在下面:

    #! perl
    use warnings;
    print "Enter hexidecimal number:";
    chomp ($hexNum = <STDIN>);
    print $hexNum . "\n";
    print  join "\n", map { unpack ('B*', pack ('H*',$_)) } split ':', 
    $hexNum;

这个问题与其他条目不同(特别是Converting hexadecimal numbers in strings to negative numbers, in Perl,因为它专门处理 8 位整数,而不是简单地转换为十进制。

【问题讨论】:

  • 请显示一些示例输入和所需的输出。我不清楚你的意思。
  • 这是完全重复的——请参阅a3f 评论中的链接。

标签: perl


【解决方案1】:

数字$n 的二进制补码就是-$n。要将结果限制为 8 位,请使用 (-$n)&amp;0xff 屏蔽其余部分。

【讨论】:

  • 我需要打印结果,以便看到翻转的位。这样做的原因是为蓝牙低功耗信标配置 Tx 负载。例如,我将输入 0xEE 并查看 -18 的 8 位表示。
【解决方案2】:
#Hex to Binary and check whether it is signed or unsigned. 
 print "Enter hexidecimal number:";
 chomp ($hexNum = <STDIN>);
 print $hexNum . "\n";
 my $bin_value = sprintf( "%08b", hex( $hexNum ));
 my $msb = ($bin_value & 0x080);
 if($msb){
 print "Unsigned Number\n"}
 else {
 print "Signed Number\n";}

如果您要将十六进制转换为十进制,则需要采用 2 的补码,您可以使用 - 运算符。

【讨论】:

    猜你喜欢
    • 2021-09-09
    • 1970-01-01
    • 2017-08-21
    • 2013-03-28
    • 2016-03-11
    • 2015-06-29
    • 1970-01-01
    • 2018-11-05
    • 2015-08-26
    相关资源
    最近更新 更多