...I don't quite understand. What does the (A >> 1) part do here and what would you do in C++ for the same effect?

Code:
#define Blend_SoftLight(A,B)    ((uint8)((B < 128) ? (2*((A >> 1)+64)) * (B/255):(255 - (2*(255-((A >> 1) + 64))*(255-B)/255))))
The above macro works with color values form 1 to 255. Myself I will be working with float values from 0.0 to 1.0.