Page 1 of 1
change a bit in a variable ?
Posted: 25 Jun 2019 13:18
by exxos
In STOS there is a function "BCLR" which can clear a bit (or BSET set a bit) in a variable.. however, hisoft basic doesn't seem to have such a function :roll: I could convert the number to a string and use MID$ and convert back to a number, but that seems a bit shitty.. does anyone know of any better ways to manipulate bits in variables ?
Re: change a bit in a variable ?
Posted: 26 Jun 2019 07:34
by mikro
In case that Hisoft Basic doesn't support logical operations (AND, XOR), that could be pretty tricky. :) If it does, then it's easy:
<input> XOR 01000000 <--- flips the 6th bit
<input> AND 01000000 <--- clears the 6th bit
<input> OR 01000000 <--- sets the 6th bit
Re: change a bit in a variable ?
Posted: 26 Jun 2019 08:46
by exxos
Interesting..
I can't see how AND wousod clear a bit though.. As if bit zero was 0 on the input, ANDed with zero, the output would be zero. In fact it would clear all bits other than the bit which is set ?
NAND. Would make sense I think. As a high on bit 7 would result in a zero ?
Re: change a bit in a variable ?
Posted: 26 Jun 2019 13:01
by mikro
Oops, you are right.
It should have been: <input> AND 10111111 <--- clears the 6th bit
Too hot! :)
Re: change a bit in a variable ?
Posted: 26 Jun 2019 14:28
by exxos
Awesome thanks. I think logic operations are in hisoft, will check it out when I get home later.
Yeah not looking forward to the pending heatwave here over the next few days!
Re: change a bit in a variable ?
Posted: 26 Jun 2019 20:51
by tzok
It's pretty common in C...
Set bit 3 (0 based index, so bit 3 is 4th bit):
a|=(1<<3)
Clear bit 3:
a&=~(1<<3)
<< - shift left
| - bitwise OR
& - bitwise AND
~ - bitwise NOT
Unfortunately Spectrum BASIC doesn't have bitwise operators, it only has logical ones :( I'm unsure if in HiSoft BASIC it is any different.
Re: change a bit in a variable ?
Posted: 26 Jun 2019 21:03
by exxos