Hi All,
New to this forum (and yes , a newbie in programming..:p)
I have a decimal to binary converter script done this way :
i=$1
bit0=$(( (i & 0x01) > 0 ))
bit1=$(( (i & 0x02) > 0 ))
bit2=$(( (i & 0x04) > 0 ))
bit3=$(( (i & 0x08) > 0 ))
bit4=$(( (i & 0x10) > 0 ))
bit5=$(( (i & 0x20) > 0 ))
bit6=$(( (i & 0x40) > 0 ))
bit7=$(( (i & 0x80) > 0 ))
Fisrt I would like to understand how the expression $(( (i & 0x01) > 0 )) works
Next, I need to obtain the same bits to its negate, so i.e. if for decimal 177
bit0=1
bit1=0
bit2=0
bit3=0
bit4=1
bit5=1
bit6=0
bit7=1
I need
bit8=0
bit9=1
bitA=1
bitB=1
bitC=0
bitD=0
bitE=1
bitF=0
is there a way to accomplish this inside the same script ??
Thank you very much.
Are you sure it is a negate or an INVERT?
What you are showing looks like an INVERT...
So just subtract 177 from 255 and voila you have your decimal 78...
BTW is this homework?
hmmmmm????
I never seen the thing under this aspect...
Effectively, let's take 98 :
01100010
do 255-98=157 that is
10011101
comparing the two:
01100010
10011101
Exactly the opposite cosidering bit to bit !!!!!
So I should keep the first part of the script to obtain the first conversion and add a second part to do 255-inputvalue and then again another conversion
like:
i=$1
n=(255-i)
bit0=$(( (i & 0x01) > 0 ))
bit1=$(( (i & 0x02) > 0 ))
bit2=$(( (i & 0x04) > 0 ))
bit3=$(( (i & 0x08) > 0 ))
bit4=$(( (i & 0x10) > 0 ))
bit5=$(( (i & 0x20) > 0 ))
bit6=$(( (i & 0x40) > 0 ))
bit7=$(( (i & 0x80) > 0 ))
bit8=$(( (n & 0x01) > 0 ))
bit9=$(( (n & 0x02) > 0 ))
bitA=$(( (n & 0x04) > 0 ))
bitB=$(( (n & 0x08) > 0 ))
bitC=$(( (n & 0x10) > 0 ))
bitD=$(( (n & 0x20) > 0 ))
bitE=$(( (n & 0x40) > 0 ))
bitF=$(( (n & 0x80) > 0 ))
??????
Is there perhaps a quicker negation of already producted single bit0-bit7 bits ??
I need it for a little project in BeagleBone GPIO, not quite homework...(homework should be done many years ago....when I was younger with less woody brain...:o )
Thank you
Hi...
REMEBER! What I have shown you is for 8 bits...
IF you require 16 bits the subtract your number from 65535...
(Similarly for 32 bits, etc...)
Look at your problem logically...
"$1" is the first user argument of your shell script and it looks as though you will be entering your script as something like this:-
Your prompt> somescript 10101010<CR>
<CR> == carraiage return...
You have saved this argument inside your variable "i"
So "i" now contains a _string_ representation of your binary value...
Use something like:-
${i:position_in_string:1}
To change each bit...
This method keeps it all inside bash builtins...
I am at work ATM so replies will be sporadic from me so have a go yourself... ;o)
The argument passed to script is a decimal number
Anyway the method you suggested me (255-i then reconversion) works 100%
Just tested on real circuit.
So i'll go that way
Thank you very much again
rbatte1
December 11, 2013, 10:37am
6
Might I suggest using what is already available?
$ i=98
$ typeset -Z8 n=`echo "ibase=10;obase=2;255-$i"|bc`
$ echo $n
10011101
$
I hope that this is useful. I got the basis of this elsewhere on the board so I thought I should share it.
Robin
Liverpool/Blackburn
UK
!!! very good as well.. !!!!
Thank you very much