Shell 十进制数的二补

Shell 十进制数的二补,shell,decimal,twos-complement,Shell,Decimal,Twos Complement,我想用shell找到十进制数的两个补码。 有人能帮我吗?Two的补码是二进制的,因此给定数字的位数,您可以处理十进制数,如: if number >= pow(2, N - 1) return number else return number - pow(2, N) 示例: N = 3 number = 2 number is less than pow(2, 3 - 1) = 4, so result = number = 2 N = 3 number = 6 nu

我想用shell找到十进制数的两个补码。
有人能帮我吗?

Two的补码是二进制的,因此给定数字的位数,您可以处理十进制数,如:

if number >= pow(2, N - 1)
    return number
else
    return number - pow(2, N)
示例:

N = 3
number = 2
number is less than pow(2, 3 - 1) = 4, so result = number = 2

N = 3
number = 6
number is greater than pow(2, 3 - 1) = 4, so result = number - pow(2, 4) = 6 - 8 = -2
我接受了他的想法

BASH

#!/bin/bash

NUMBER="$1"
BITS="$2"

# I check the presence of the arguments
if [ -z "$NUMBER" -o -z "$BITS" ]; then
    echo "Usage: $0 <number> <n_bits>"
    exit
fi

# I check the arguments are numeric values
RE='^[0-9]+$'
if ! [[ $NUMBER =~ $RE ]] || ! [[ $BITS =~ $RE ]] ; then
    echo "The inputs must be numeric values"
    exit
fi

# Calculate, with awk, the powers I need
N_POW=$(awk "BEGIN{ print 2 ** $BITS }")
NM1_POW=$(awk "BEGIN{ print 2 ** ($BITS - 1) }")

# Result...
if [ $NUMBER -lt $NM1_POW ];
then
    echo $NUMBER
else
    echo $(($NUMBER - $N_POW))
fi
#/bin/bash
NUMBER=“$1”
BITS=“$2”
#我检查是否存在这些论点
如果[-z“$NUMBER”-o-z“$BITS”];然后
echo“用法:$0”
出口
fi
#我检查参数是否为数值
RE='^[0-9]+$'
如果![[$NUMBER=~$RE]]|| |![$BITS=~$RE]];然后
echo“输入必须是数值”
出口
fi
#用awk计算我需要的能量
N_POW=$(awk“开始{print 2**$BITS}”)
NM1_POW=$(awk“开始{print 2**($BITS-1)}”)
#结果。。。
如果[$NUMBER-lt$NM1_POW];
然后
回音$NUMBER
其他的
echo$($NUMBER-$N_POW))
fi
您可以尝试使用bc:

dec=-4; bits=6;
bin=$(printf "%0.${bits}d\n" $(echo "ibase=10;obase=2;$(((2**(bits))+$dec))" | bc) )
bin=$(echo $bin | grep -oE "[[:digit:]]{$bits}$")
echo $bin
111100

你试过自己解决这个问题吗?如果是,您遇到了什么问题?请把你的问题告诉我们。这似乎与此相关,但并没有真正解决使用shell部分的问题。请将其粘贴到my_script.sh文件中,然后在shell中运行sh my_script.sh