Basic Point :-
let take b=5,c=2
float a = b/c ====> a=2.0 why?
because by precedence and associativity, (float a) = (b/c) ===> equal operator is right associative, therefore (b/c) evaluates first
b and c are integers ===> after evaluating b/c, it will convert to int and returns 2
if atleast either one of the b and c are float ===> after evaluating b/c, it will convert to float and returns 2.5
long int a = 0x7fffffff * 0x7fffffff;
0x7fffffff * 0x7fffffff ==> ( 3FFFFFFF00000001 )H it is long int but our operands are int, therefore convert into int ===> ( 00000001 )H . ===> long int a = ( 00000001 )H = ( 1 )10
long int b = 0x7fffffff * 0x7fffffffl;
0x7fffffff * 0x7fffffff ==> ( 3FFFFFFF00000001 )H it is long int but one of our operands is long int, therefore convert into long int ===> ( 3FFFFFFF00000001 )H . ===> long int b = ( 3FFFFFFF00000001 )H = ( 4611686014132420609 )10