Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Perl > vec - a misunderstanding

Reply
Thread Tools

vec - a misunderstanding

 
 
Mark Hobley
Guest
Posts: n/a
 
      03-18-2006
I am trying to understand how the vec function is used.

I have produced the following code, but the behaviour is not as expected.

$binstring = '@' ; # 01000000 binary ascii code
print vec($binstring,0,1); # returns 0, the binary value of bits 0 and 1
vec($binstring,0,1) = 3; # bits 0 and 1
print $binstring; # returns A, I am expecting C (binary ascii code 01000011)
vec($binstring,2,1) = 3; # bits 2 and 3
print $binstring; # returns E, I am expecting O (binary ascii code 01001111)

Documentation tells me that vec has the syntax:

vec EXPR, OFFSET, BITS

where BITS is a power of 2 from 1 to 32.

I presumed offset of zero would give me the leftmost (most significant) bit.
It actually gives me the rightmost bit.

Is this expected behaviour?

The number of bits is a power of two ranging from 1 to 32. Presumably this
means that minimum element size (BITS = 1) is 2^1 = 2 bits, and therefore I
cannot use single bit elements.

Is it correct that if BITS = 1, my elements should be 2 bits wide?

I presumed that the offset was in number of elements, so an offset of 1, would
point to bits two and three. It actually appears to point to bit 1, which is
part of the first element.

Presumably then, offset is in number of bits, not number of elements. Is this
correct?

When I set the value of my element to three, indicating both bits set to 1, I
only appear to be getting a single bit set.

What is going on here?

--
Mark Hobley
393 Quinton Road West
QUINTON
Birmingham
B32 1QE

Telephone: (0121) 247 1596
International: 0044 121 247 1596

Email: markhobley at hotpop dot donottypethisbit com

http://markhobley.yi.org/

 
Reply With Quote
 
 
 
 
John Bokma
Guest
Posts: n/a
 
      03-18-2006
(Mark Hobley) wrote:


> The number of bits is a power of two ranging from 1 to 32. Presumably
> this means that minimum element size (BITS = 1) is 2^1 = 2 bits, and
> therefore I cannot use single bit elements.


Yes you can, but you can't use 3 or 5, the *number* has to be a power of
two, so 2^0, 2^1, 2^2, 2^3, 2^4.

> Is it correct that if BITS = 1, my elements should be 2 bits wide?


No, it's 1, but you can't use 3 bits wide, since 3 is not a power of 2 (if
I read the documentation correctly).


--
John Bokma Freelance software developer
&
Experienced Perl programmer: http://castleamber.com/
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
(&vec)== &vec[0]? Ioannis Vranos C++ 5 10-01-2008 02:27 PM
is vec.reserve(unsigned int) better than vec(unsigned int)? er C++ 6 09-14-2007 06:20 AM
Help Novice sorting a vec and mantaint the relationship with a Matrix! Pino C++ 3 06-14-2007 01:14 AM
vec - a misunderstanding Mark Hobley Perl Misc 2 03-18-2006 10:12 PM
Forgetting how to use vec Aaron Sherman Perl 0 02-05-2004 06:50 PM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57