0xA0000000000000000000000000000000
является целочисленной константой и в зависимости от вашей системы может не поддерживаться.Большой тип целочисленной константы - unsigned long long
, и если ширина unsigned long long
в вашей системе равна 64-битной, эта константа не подойдет.
Что вы можете сделать, это использовать шестнадцатеричный* плавающая константа вместо шестнадцатеричной целочисленной константы.
long double f = 0xA0000000000000000000000000000000p0L;
^^ the exponent is 0
в порядке.
p
представляет показатель степени (обязательно), а L
указывает, что это long double
литерал (по умолчанию double
).
Шестнадцатеричная плавающая константа является дополнением к C99 и обратите внимание, что в шестнадцатеричных плавающих константах требуется экспонента.
Относительно побитовых операторов (вторая частьвашего вопроса), операнды побитовых операторов должны быть целочисленных типов, поэтому вы не можете выполнять побитовые операции над значениями с плавающей запятой.