Тип и размер вашей переменной в порядке. Просто у компилятора есть несколько типов по умолчанию для литералов, эти константы жестко запрограммированы в вашей программе .
Если вы запросите sizeof(1)
, вы получите sizeof(int)
.Если вы запросите sizeof(2.5)
, вы получите sizeof(double)
.Они явно вписываются в char и float соответственно, но компилятор имеет типы по умолчанию для ваших литералов и будет обрабатывать их как таковые до присваивания.
Однако вы можете переопределить это поведение по умолчанию.Например:
2.5 // as you didn't specify anything, the compiler will take it for a double.
2.5f // ah ha! you're specifying this literal to be float
Приветствия!