You are attempting normal maths with pointers - try casting the pointers to integers before attempting the binary operations (you will, of course need to cast back to a pointer for the assignment back to the pointer variable).
I might point out that your paging structures need to be page-aligned anyway. If they were, doing a bitwise AND with 0xFFFFF000 would have no effect at all, since the least significant 12 bits would already be zero. If they're not [page-aligned], then you're going to have problems when you try to load them into cr3.