Can two block of memory do & operation meanwhile?

D

dolphin

Hi all
I have a question about & operation. For example, I have two
memory blocks like below:
char memory1[10];
char memory2[10];
Is there any way to do the & operation at one time for this two
arrays? Or I need ues a loop to do it by byte? Thanks!
 
I

Ian Collins

dolphin said:
Hi all
I have a question about & operation. For example, I have two
memory blocks like below:
char memory1[10];
char memory2[10];
Is there any way to do the & operation at one time for this two
arrays? Or I need ues a loop to do it by byte? Thanks!

The latter, you need a loop.

You may be able to alias the blocks with a pointer to a larger type (say
unsigned long) and cut down the number of iterations.
 
V

Vidar Hasfjord

Hi all
       I have a question about & operation. For example, I have two
memory blocks like below:
       char memory1[10];
       char memory2[10];
       Is there any way to do the & operation at one time for this two
arrays? Or I need ues a loop to do it by byte? Thanks!

Chexk out std::valarray.
 
V

Vidar Hasfjord

Hi all
       I have a question about & operation. For example, I have two
memory blocks like below:
       char memory1[10];
       char memory2[10];
       Is there any way to do the & operation at one time for this two
arrays? Or I need ues a loop to do it by byte? Thanks!

Chexk out std::valarray.
 
P

Pascal J. Bourguignon

dolphin said:
Hi all
I have a question about & operation. For example, I have two
memory blocks like below:
char memory1[10];
char memory2[10];
Is there any way to do the & operation at one time for this two
arrays? Or I need ues a loop to do it by byte? Thanks!

std::transform(memory1,memory1+10,memory2,memory3,bitAnd);

------------------------------------------------------------------------
#include <algorithm>
#include <iostream>
#include <iterator>

#include <boost/bind.hpp>

unsigned char bitAnd(unsigned char a,unsigned char b){return(a&b);}
int main(){
unsigned char memory1[10]={1,2,3,4,5,6,7,8,10};
unsigned char memory2[10]={15,14,13,12,11,10,9,8,7,6};
unsigned char memory3[10];
// memory3 = memory1 & memory2
std::transform(memory1,memory1+10,memory2,memory3,bitAnd);
std::copy(memory3,memory3+10,std::eek:stream_iterator<int>(std::cout,", "));
std::cout<<std::endl;
return(0);
}

/*
-*- mode: compilation; default-directory: "~/src/tests-c++/" -*-
Compilation started at Wed Feb 4 10:49:20

SRC="/home/pjb/src/tests-c++/array-and.c++" ; EXE="array-and" ; g++ -g3 -ggdb3 -o ${EXE} ${SRC} && ./${EXE} && echo status = $?
1, 2, 1, 4, 1, 2, 1, 8, 2, 0,
status = 0

Compilation finished at Wed Feb 4 10:49:20

*/
 
P

puzzlecracker

dolphin said:
Hi all
       I have a question about & operation. For example, I have two
memory blocks like below:
       char memory1[10];
       char memory2[10];
       Is there any way to do the & operation at one time for this two
arrays? Or I need ues a loop to do it by byte? Thanks!

    std::transform(memory1,memory1+10,memory2,memory3,bitAnd);

------------------------------------------------------------------------
#include <algorithm>
#include <iostream>
#include <iterator>

#include <boost/bind.hpp>

unsigned char bitAnd(unsigned char a,unsigned char b){return(a&b);}
int main(){
    unsigned char memory1[10]={1,2,3,4,5,6,7,8,10};
    unsigned char memory2[10]={15,14,13,12,11,10,9,8,7,6};
    unsigned char memory3[10];
    // memory3 = memory1 & memory2
    std::transform(memory1,memory1+10,memory2,memory3,bitAnd);
    std::copy(memory3,memory3+10,std::eek:stream_iterator<int>(std::cout,", "));
    std::cout<<std::endl;
    return(0);

}

/*
-*- mode: compilation; default-directory: "~/src/tests-c++/" -*-
Compilation started at Wed Feb  4 10:49:20

SRC="/home/pjb/src/tests-c++/array-and.c++" ; EXE="array-and" ; g++ -g3 -ggdb3 -o ${EXE} ${SRC} &&  ./${EXE} && echo status = $?
1, 2, 1, 4, 1, 2, 1, 8, 2, 0,
status = 0

Compilation finished at Wed Feb  4 10:49:20

 */              

I don't think you need to include #include <boost/bind.hpp> in this
example.
 
D

dolphin

dolphin said:
Hi all
       I have a question about & operation. For example, I have two
memory blocks like below:
       char memory1[10];
       char memory2[10];
       Is there any way to do the & operation at one time for this two
arrays? Or I need ues a loop to do it by byte? Thanks!

    std::transform(memory1,memory1+10,memory2,memory3,bitAnd);

------------------------------------------------------------------------
#include <algorithm>
#include <iostream>
#include <iterator>

#include <boost/bind.hpp>

unsigned char bitAnd(unsigned char a,unsigned char b){return(a&b);}
int main(){
    unsigned char memory1[10]={1,2,3,4,5,6,7,8,10};
    unsigned char memory2[10]={15,14,13,12,11,10,9,8,7,6};
    unsigned char memory3[10];
    // memory3 = memory1 & memory2
    std::transform(memory1,memory1+10,memory2,memory3,bitAnd);
    std::copy(memory3,memory3+10,std::eek:stream_iterator<int>(std::cout,", "));
    std::cout<<std::endl;
    return(0);

}

/*
-*- mode: compilation; default-directory: "~/src/tests-c++/" -*-
Compilation started at Wed Feb  4 10:49:20

SRC="/home/pjb/src/tests-c++/array-and.c++" ; EXE="array-and" ; g++ -g3 -ggdb3 -o ${EXE} ${SRC} &&  ./${EXE} && echo status = $?
1, 2, 1, 4, 1, 2, 1, 8, 2, 0,
status = 0

Compilation finished at Wed Feb  4 10:49:20

 */              

I think it is helpful for me. Thnaks I will try it.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,906
Latest member
SkinfixSkintag

Latest Threads

Top