The theory and practice of weight-painting:
A vertex initially has a weight of zero unless it has already been assigned to a vertex group matching a bone.
Weight is effectively averaged across two or more bones to which a vertex is assigned. If it is only assigned to one bone then the average will always be 1.0, no matter what the assigned weight is. So, if you paint an unassigned vertex it will immediately adopt a practical weight of 1.0 even if you only paint it at 0.25.
However, if you paint a vertex with weight 1.0 to bone “LowerLeg” and weight 1.0 to bone “UpperLeg”, then it will have an effective weight of 0.5 for each bone. The same applies if you paint it at 0.5 for both bones or 0.25 for both bones. The average in each case will be 0.5.
Initially this can seem a little irrational but when you understand that it is a mathematical average, you understand the result. A vert with 0.75 weight to one bone and 0.25 to another bone delivers essentially expected results.
Now, there’s one minor problem (bug perhaps) which means that if you weight paint a vertex to zero, it tends to remain in the group and often responds as if its weight is 1.0 if it isn’t also assigned to something else (I guess you could argue that 0/0=1.0). It has been suggested recently that changing the paint tool to solid instead of spray fixes this but I haven’t tested it. Personally, I try not to paint verts to zero unless I’m certain the same vert is assigned to another bone. Even then, in many cases I like to find these unweighted verts and remove them from the group via the vertex groups panel “remove” function. You can check a vert’s bone/group assignments by Shift-LMB on it in weight-paint mode.
Hope that makes some sense. It’s late and I’m not always thinking straight at his hour. (Actually “average” is not really the appropriate term since the average of two equivalent numbers is the same number - but you get my meaning. I’m sure a coder could explain it in terms of AND, OR and XOR and all that stuff)