PDA

View Full Version : Checking Bit of a Byte using another variable



financecatalyst
- 10th December 2010, 20:55
If I have two byte variables Check and Days.
If Days only range from 1 to 7, can we check bits in Check based on Days?

For example, lets say if Days=5, I am having trouble with the following method:


if Check[Days]=1 then goto whatever
In the above example I want to check bit 5 of Check variable.

Is there any other method to do the above task?

aratti
- 10th December 2010, 21:31
Is there any other method to do the above task?

Yes:

if Check.0[Days]=1 then goto whatever

Cheers

Al.

financecatalyst
- 10th December 2010, 21:41
if Check.0[Days]=1 then goto whatever

Al.

Thanks Al, can you please explain what does "0" in Check.0 does?

Bruce
- 10th December 2010, 21:54
Check.0[Days] tells PBP to treat Check as a bit array with Days as the bit index pointer.

Since Check is a byte PBP will treat it as an 8-bit array. The lowest bit will be 0, and the
highest bit will be 7.

If Days = 5; then IF Check.0[Days]=1 will be testing bit position 6 in Check if you're
counting bit positions in Check from left-to-right as 87654321.

Then you would use; IF Check.0[Days-1]=1 THEN.

If you're counting bit positions in Check from left-to-right as 76543210 then it would work
with; IF Check.0[Days]=1 THEN.

financecatalyst
- 11th December 2010, 17:39
Check.0[Days] tells PBP to treat Check as a bit array with Days as the bit index pointer.

Since Check is a byte PBP will treat it as an 8-bit array. The lowest bit will be 0, and the
highest bit will be 7.

If Days = 5; then IF Check.0[Days]=1 will be testing bit position 6 in Check if you're
counting bit positions in Check from left-to-right as 87654321.

Then you would use; IF Check.0[Days-1]=1 THEN.

If you're counting bit positions in Check from left-to-right as 76543210 then it would work
with; IF Check.0[Days]=1 THEN.

Thanks for the explanation, few clarifications:
1) Do bits get counted from right to left OR left to right?
I mean to say isn't that Check.0[Days]=1 should check bit 4? (Assuming Days=5)
2) What can I do if Check is a word and I want to check:
a) Bit 15 & Bit 3 (Just want to know)
b) Lower byte value & higher byte value

Bruce
- 11th December 2010, 19:27
These threads should make it easier for you;

http://www.picbasic.co.uk/forum/showthread.php?t=544

http://www.picbasic.co.uk/forum/showthread.php?t=3753

financecatalyst
- 12th December 2010, 14:37
Thanks Bruce, the topics have really been helpful.
After reading them, I still have one question (Just want to confirm)

Please correct me if I am wrong :

Check=

To access bit7 of Check variable (byte) : Should it be
[B]Check.0[days] ; Days =7 in this example

Similarly :

To access bit1 of Check variable (byte) : Should it be
Check.0[days] ; Days =1 in this example

Bruce
- 12th December 2010, 15:02
Yep that will work.