Это больше академический интерес, хочу разобраться как оно работает.
Это вы сейчас в очень глубокую нору заглядываете.
Движки стараются оптимизировать по максимуму, поэтому там очень много всего накручено помимо наличия int32.
Я не удивлюсь если в вашем конкретно примере они сделают просто a=1.5 в обоих случаях и код будет идентичный до байта.
а потом эту a подставят куда надо и оптимизируют там еще что-то, например b=c+a превратится в b=c+1.5
кроме того, есть разные компиляторы - которые генерируют оптимальный код для частных случаев, или более "общий" но более медленный.
Например для каждой переменной во время работы записывается какой тип в нее приходит, если этот участок кода вызывается достаточно часто - он помечается "горячим" и затем смотрится, если у вас в "a" всегда один и тот же тип, то генерируется быстрый код для этого типа, и ставятся проверки, если вдруг придет что-то другое, то этот код выкидывается и происходит возврат к более общему.
И много чего другого, лишь бы быстрее работало.
Даже если вы прямо сейчас разберетесь во всем, то завтра запилят новую оптимизацию где-то в глубине движка и что-то будет работать уже по другому.