Velocity Reviews > C++ > Even Parity

# Even Parity

nick.stefanov@gmail.com
Guest
Posts: n/a

 11-28-2005
I am trying to compute an even parity bit for a variable of type
char[]. Are there any C++, C# examples on how to first compute the bit
and then check it. Thank you very much ahead of time.

Nick

roberts.noah@gmail.com
Guest
Posts: n/a

 11-28-2005

(E-Mail Removed) wrote:
> I am trying to compute an even parity bit for a variable of type
> char[]. Are there any C++, C# examples on how to first compute the bit
> and then check it. Thank you very much ahead of time.

Try the >> operator.

Victor Bazarov
Guest
Posts: n/a

 11-28-2005
http://www.velocityreviews.com/forums/(E-Mail Removed) wrote:
> I am trying to compute an even parity bit for a variable of type
> char[]. Are there any C++, C# examples on how to first compute the
> bit and then check it. Thank you very much ahead of time.

If there are examples, they would be on the 'Net, don't you think?
Have you tried looking for them there? Besides, what does C# have
to do with this newsgroup?

Rolf Magnus
Guest
Posts: n/a

 11-28-2005
(E-Mail Removed) wrote:

> I am trying to compute an even parity bit for a variable of type
> char[]. Are there any C++, C# examples on how to first compute the bit
> and then check it. Thank you very much ahead of time.

This should give you an idea of how to do it:

#include <iostream>
#include <limits>

int main()
{
unsigned char x = 0x36;

for (int i = 0; i < std::numeric_limits<unsigned char>::digits; ++i)
{
bool bit = x & (1 << i);
std::cout << "bit " << i << " is " << bit << '\n';
}
}

n2xssvv g02gfr12930
Guest
Posts: n/a

 11-28-2005
(E-Mail Removed) wrote:
> I am trying to compute an even parity bit for a variable of type
> char[]. Are there any C++, C# examples on how to first compute the bit
> and then check it. Thank you very much ahead of time.
>
> Nick
>

This code will return true if an even parity bit is required

bool ParityBit(char inp)
{
bool Parity = false;
for (;inp;inp &= (inp-1))
{
Parity ^= true;
}
return Parity;
}

Note by setting Parity to true to begin with will result in
returning true for odd parity.

JB

red floyd
Guest
Posts: n/a

 11-28-2005
Victor Bazarov wrote:
> (E-Mail Removed) wrote:
>
>>I am trying to compute an even parity bit for a variable of type
>>char[]. Are there any C++, C# examples on how to first compute the
>>bit and then check it. Thank you very much ahead of time.

>
>
> If there are examples, they would be on the 'Net, don't you think?
> Have you tried looking for them there? Besides, what does C# have
> to do with this newsgroup?
>
>

Actually, it's probably cheapest just to use a lookup table with 256
entries.

Victor Bazarov
Guest
Posts: n/a

 11-28-2005
red floyd wrote:
> Victor Bazarov wrote:
>
>> (E-Mail Removed) wrote:
>>
>>> I am trying to compute an even parity bit for a variable of type
>>> char[]. Are there any C++, C# examples on how to first compute the
>>> bit and then check it. Thank you very much ahead of time.

>>
>>
>>
>> If there are examples, they would be on the 'Net, don't you think?
>> Have you tried looking for them there? Besides, what does C# have
>> to do with this newsgroup?
>>
>>

>
> Actually, it's probably cheapest just to use a lookup table with 256
> entries.

256 entries in a table for "a variable of type char[]"? How do you
figure?

V

red floyd
Guest
Posts: n/a

 11-28-2005
Victor Bazarov wrote:
> red floyd wrote:
>>
>> Actually, it's probably cheapest just to use a lookup table with 256
>> entries.

>
>
> 256 entries in a table for "a variable of type char[]"? How do you
> figure?
>
> V

I meant it was faster to use a lookup than to use the shifting
methods mentioned above.

#include <algorithm>

struct parity
{
unsigned char operator()(unsigned char c) const
{
static const unsigned char parity_table[] = {
// FILL THIS IN
};
return parity_table[c];
}
};

unsigned char get_parity(unsigned char buf[], int len)
{
return std::accumulate(buf, buf+len, 0, parity());
}

Victor Bazarov
Guest
Posts: n/a

 11-28-2005
red floyd wrote:
> Victor Bazarov wrote:
>
>> red floyd wrote:
>>
>>>
>>> Actually, it's probably cheapest just to use a lookup table with 256
>>> entries.

>>
>>
>>
>> 256 entries in a table for "a variable of type char[]"? How do you
>> figure?
>>
>> V

>
>
> I meant it was faster to use a lookup than to use the shifting
> methods mentioned above.

And I meant to point out that you'd assumed the OP was asking about the
unsigned char type, on a system that has CHAR_BITS == 8. The OP did no
such thing judging from the post alone.

> #include <algorithm>
>
> struct parity
> {
> unsigned char operator()(unsigned char c) const
> {
> static const unsigned char parity_table[] = {
> // FILL THIS IN

How do you "FILL THIS IN"? A bunch of #ifdef's? What if the size of the
'unsigned char' is 16 bits? What if it's 32 bits? Please do not rush to

> };
> return parity_table[c];
> }
> };
>
> unsigned char get_parity(unsigned char buf[], int len)
> {
> return std::accumulate(buf, buf+len, 0, parity());
> }

V

red floyd
Guest
Posts: n/a

 11-28-2005
Victor Bazarov wrote:
>
> And I meant to point out that you'd assumed the OP was asking about the
> unsigned char type, on a system that has CHAR_BITS == 8. The OP did no
> such thing judging from the post alone.
>

Good point about CHAR_BITS. I stand corrected. However, when
generating parity, the size of the data item being paritized(?) is
known, and depending on size, a lookup table can definitely be more
efficient *and* simpler.