how to shift a 32bit array in C++? for this i need a c++ programming!!!
pl help me in this!!!!
Printable View
how to shift a 32bit array in C++? for this i need a c++ programming!!!
pl help me in this!!!!
Shift what and how? Do you think of the array as an integer > 32 bits that should be shifted?
array contains binary number of length-32!!!! how to do shifting of those binary numbers!!!!
array contains binary number of length-32!!!! how to do shifting of those binary numbers!!!![it has to shift from left to right].
int p[32]={1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,1,0,1,1,0}
how to do shifting of this array?
Show us some code. It still isn't clear exactly what the type or size of this array is.
Not sure if vector is an appropriate replacement in your case...
Code:#include <vector>
#include <string>
#include <iostream>
#define COUNTOF(x) (sizeof(x)/sizeof(x[0]))
template <typename T>
void DumpVect(std::vector<T>& v)
{
// dump size
std::cout << "*[" << v.size() << "] ";
// dump elements
for (int idx = 0; idx < v.size(); idx++)
{
if (idx)
std::cout << ",";
std::cout << v.at(idx);
}
std::cout << std::endl;
}
template <typename T>
void ShiftVect(std::vector<T>& v, T begval)
{
// shift left to right
v.erase(v.end() - 1); // erase rightmost element
v.insert(v.begin(), begval); // insert begval as the first element
}
int main(int argc, char** argv)
{
bool shift = true;
if (argc > 1)
{
std::string action = argv[1];
if (action == "rotate")
shift = false;
}
// source array
int p[32]={1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,1,0,1,1,0};
std::vector<int> v;
// fill the vector
for (int idx = 0; idx < COUNTOF(p); idx++)
v.push_back(p[idx]);
DumpVect(v);
std::cout << std::endl;
// drive on
for (int idx = 0; idx < COUNTOF(p); idx++)
{
int begval = shift ? 0 : *(v.end() - 1);
ShiftVect(v, begval); // 0 - shift
// *(v.end() - 1) - rotate
DumpVect(v);
}
return 0;
}
Code:E:\Temp\643>643
*[32] 1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,1,0,1,1,0
*[32] 0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,1,0,1,1
*[32] 0,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,1,0,1
*[32] 0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,1,0
*[32] 0,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,1
*[32] 0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1
*[32] 0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1,0
*[32] 0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1
*[32] 0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1
*[32] 0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0
*[32] 0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1
*[32] 0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0
*[32] 0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0
*[32] 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1
*[32] 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0
*[32] 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,1
*[32] 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1
*[32] 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0
*[32] 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0
*[32] 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,1
*[32] 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0
*[32] 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,1
*[32] 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0
*[32] 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0
*[32] 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1
*[32] 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0
*[32] 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1
*[32] 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0
*[32] 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1
*[32] 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1
*[32] 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0
*[32] 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
*[32] 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Code:E:\Temp\643>643 rotate
*[32] 1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,1,0,1,1,0
*[32] 0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,1,0,1,1
*[32] 1,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,1,0,1
*[32] 1,1,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,1,0
*[32] 0,1,1,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,1
*[32] 1,0,1,1,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1
*[32] 1,1,0,1,1,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1,0
*[32] 0,1,1,0,1,1,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1
*[32] 1,0,1,1,0,1,1,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1
*[32] 1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0
*[32] 0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1
*[32] 1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0
*[32] 0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0
*[32] 0,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1
*[32] 1,0,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0
*[32] 0,1,0,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,1
*[32] 1,0,1,0,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1
*[32] 1,1,0,1,0,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0
*[32] 0,1,1,0,1,0,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0
*[32] 0,0,1,1,0,1,0,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,0,1,0,0,1,0,1
*[32] 1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,0,1,0,0,1,0
*[32] 0,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,0,1,0,0,1
*[32] 1,0,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,0,1,0,0
*[32] 0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,0,1,0
*[32] 0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,0,1
*[32] 1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,0
*[32] 0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1
*[32] 1,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0
*[32] 0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1
*[32] 1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1
*[32] 1,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,1,0,1,1,0,1,0
*[32] 0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,1,0,1,1,0,1
*[32] 1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,1,0,1,1,0
array contains binary number of length-32!!!! how to do shifting of those binary numbers!!!![it has to shift from left to right].
int p[32]={1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,1,0,1,1,0}
how to do shifting of this array?
You really think that repeating your question without any additional explanation can help?
You go in loop from end to beginning setting p[i] = p[i-1]; finally p[0] = 0; (or any other required)
Why not write the program and see if it works?
Seriously, I can't believe the number of new posters who either refuse to debug their code and want one of us to do that job for them, or they can't just write their program and then see if it works or not.
Regards,
Paul McKenzie
As far as I can tell, the code is going to crash immediately on the first iteration because of index being out of bounds. And even started from 1, the code just replicates the first array element (not bits!) through the rest of the array. So the answer is: No they won't. :)Quote:
for(i=0;i<31;i++)
{
p[i]=p[i-1];
cout<<p[i];
} // if i use this code the bits be shifted from left to right?
You need to elaborate on what you expect to happen at the boundary conditions (first and last element of the array).
Frankly, why is it so impossible to spend a few minutes to write a question that clearly states the issue?
Assuming that you want to shift
int p[32]={1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,1,0,1,1,0} from left to right this should do it
Code:for(int i=1;i<31;i++)
{
p[i]=p[i-1];
}
p[31] = 0;
Not perhaps rather something like:
? ;)Code:for(int i = 31; i > 0; i--)
{
p[i]=p[i-1];
}
p[0] = 0;
Based on the assumption, of course, that "left" means the end with the lower index, i.e. 0, just like it's written in the initializer.
Now I just hope you didn't just want to give the OP something to debug and now I've spoiled it... ;)
I written a code like this. This code is for linear feedback shift register for 32bit length.
#include <iostream>
#include<bitset>
#include<string>
#define lfsr_ length=32;
using namespace std;
class lfsr
{
public:
void computation()
{
int p[33]={0,0,1,1,1,1,0,1,1,0,0,0,1,1,0,0,1,1,1,0,0,1,0,1,0,1,0,1,1,0,1,0,0};
int n1,n2,n3;
n1= p[32] ^ p[28];
n2= n1 ^ p[27];
n3= n2 ^ p[1];
p[0]=n3;
// this is the code for shifting which i written.could anyone tell me if i write code like below, the elements of array shifts properly.
int i;
for(i=32; i>1; i--)
{
p[i]=p[i-1];
cout<<p[i];
}
}
};
int main()
{
lfsr l1;
l1.computation();
return 0;
}
shift elements in the array contains some elements like{0,1,1,......} and this element has to shift from left to right.
its not showing any error but having a doubt whether it shifts properly if I write a code like above.
Please explain EXACTLY what you mean by "shift elements in the array"!!!!!!!!!!!!!! Try do to it without using the phrase "shift elements in the array"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Try to do it without exclamation points. They are considered rude!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
To make your doubt to vanish you have to understand first what "shift properly" really means, and analyze your code whether it does what's required. And even if we can help with 'analyze' part, the 'understand' part is all yours. In fact, this is what we say here from the very beginning. If you're not able to understand your assignment, how else could we help?Quote:
its not showing any error but having a doubt whether it shifts properly if i write a code like above.
No you didn't spoil anything Eri523. I was just to tired. Posting on a friday evening after a dinner with wine isn't to be recommended either... :o
What does Linear feedback shift register have to do with shifting elements in your array?
You can't really start solving the problem until you understand what the problem is...
1) ON MS by default an integer is a 32 bit variable.
2) What you have is an 32 item array of 32 bit variables, and you are using only bit0 in each of them.
So you are effectively using an array of 32 bits as a single bit.
You can probably do this assignment in a more elegant fashion with bit operations and an 32 bit unsigned integer.