Obviamente que se puede desbordar un long. NO uniendo todas las memorias del mundo se podria hacer un numero que no se desborde...
Tu problema puede estar que la forma de representar los numeros y los bits que ocupan son distintos. Por ejemplo los enteros ocupan 32 bits. Y se representan mediante el
complemento a dos
Por otro lado los float se representan totalmente distinto pero ocupan la misma memoria. Basicamente se reservan bits para la base y bits para el exponente. Bien no me acuerdo ahora. Asi que si vos le decis al printf que imprima un entero pero le pasas un float seguramente va a imprimir cualquier gansada. Ya que tienen distintas representaciones.
Asi que estimo que el long se representan de cierta forma que desconosco y debe ocupar mas que un entero. Asi que posiblemente toma una parte del entero y la representacion de esa parte hacia entero es basura.
Asi que mejor indicale al printf que imprima lo siguiente:
printf("el resultado es %ld",resultado);