The process itself is rather complicated, as it involves using a lot of quaternions and matrix operations. You can't just take average of bones rotations/positions, since it would result in bizarre picture.
Here's a sample code from Havok Animation component (used for blending two hkQsTransforms - universal transform class).
void hkQsTransform::blendAddMul(const hkQsTransform& other, hkSimdRealParameter weight = 1.0f );
void hkQsTransform::blendNormalize( hkSimdRealParameter totalWeight = 1.0f);
I believe what you want to achieve is having two animations, let's call them Move and Shoot, and being able to have player in states Move, Shoot, ShootWhileMoving. Blending of the bones will allow you to have 3 states with only 2 animations.
You might also notice, that, for example, shooting animation doesn't take legs in account - player just takes a gun and raises it, while standing still. That's what weights are for - you can just set weights on legs' bones in shooting animation to 0, and it will simplify all of the process.
As the finishing word - blending is also very useful in transition between states, for example running and standing still. It allows smooth beginning and ending, rather than characted sharply starting and stopping. Different curves can be used when transitioning, to make the transition even more smooth, or rather sharp (but still it's a transition, not complete change - at once)/