1 / 1 / 0
Регистрация: 02.03.2014
Сообщений: 133
|
||||||
1 | ||||||
Тип float нельзя сдвигать?06.04.2017, 21:08. Показов 1111. Ответов 11
Метки нет (Все метки)
Пытаюсь сделать так:
0
|
06.04.2017, 21:08 | |
Ответы с готовыми решениями:
11
"Значение типа float* нельзя использовать для инициализации сущности типа float" Ошибка преобразования: значение типа "float *" нельзя присвоить сущности типа "float" Тип float в массиве Тип данных float |
Вездепух
11697 / 6376 / 1724
Регистрация: 18.10.2014
Сообщений: 16,080
|
||||||||||||||||
06.04.2017, 21:19 | 2 | |||||||||||||||
Нельзя. Как вы его собрались сдвигать?
Подобрать целочисленный тип, размер которого совпадает с размером типа float и объявить переменную этого типа
float в переменную i_data при помощи memcpy
i_data .Почему у вас в коде сдвиг влево вместо сдвига вправо - не ясно. --- Можно вместо memcpy воспользоваться union
1
|
Вездепух
11697 / 6376 / 1724
Регистрация: 18.10.2014
Сообщений: 16,080
|
|
06.04.2017, 21:55 | 4 |
По-моему эта тема всплывает уже в сотый раз. Явное разрешение на использование union для "type punning" было добавлено в Technical Corrigendum 3 для стандарта C99 в процессе разрешения Defect Reports №257 и №283. Использование union для этой цели официально разрешено в С и компиляторы не имеют права применять правила strict aliasing внутри union.
Вообще-то даже оригинальный C89/90 говорит: "With one exception, if a member of a union object is accessed after a value has been stored in a different member of the object, the behavior is implementation-defined." Т.е. даже в C89/90 поведение не является неопределенным, а определяется реализацией.
5
|
шКодер самоучка
|
||||||
06.04.2017, 22:02 | 5 | |||||
Немного шаблонной магии
0
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|
06.04.2017, 22:08 | 6 |
Max Dark, запись в одну переменную, чтение с другой. Разве не UB это сударь?
1
|
1 / 1 / 0
Регистрация: 02.03.2014
Сообщений: 133
|
|||||||||||
06.04.2017, 22:32 [ТС] | 7 | ||||||||||
Что значит строка
И ещё, почему в моё коде в файл не записывается символ конца строки?
0
|
Вездепух
11697 / 6376 / 1724
Регистрация: 18.10.2014
Сообщений: 16,080
|
|
06.04.2017, 23:09 | 8 |
Как именно она ругается? Почему не процитировано сообщение об ошибке?
Что значит "не записывается"? У вас файл открыт в бинарном режиме, что означает, что символ \n будет туда записан именно как единственный символ \n , без трансляции в системно-зависимое соглашение о формате символа конца строки. Т.е. на Windows, например, записан будет именно и только символ 10, а не требуемое Windows сочетание CR-LF (13-10, \r\n ). Откройте файл в бинарном просмотрщике и убедитесь, что все туда прекрасно записывается.Если вы открыли файл в бинарном режиме, то записывать туда правильный системно-зависимый конец строки - ваша задача. Но возникает вопрос: а с чего это вдруг вы его открывали в бинарном режиме? Зачем?
0
|
1 / 1 / 0
Регистрация: 02.03.2014
Сообщений: 133
|
||||||
07.04.2017, 22:20 [ТС] | 9 | |||||
Для самопроверки написал программу, которая из файла float-ов делает файл строк с символами '0' и '1', а затем перегоняет обратно во float-ы. Исходный и итоговый файлы должны совпадать, но они разные. Где ошибка? Видимо, только последняя часть с записью в файл не работает, так как data и data2 совпадают.
0
|
Вездепух
11697 / 6376 / 1724
Регистрация: 18.10.2014
Сообщений: 16,080
|
|
07.04.2017, 22:37 | 10 |
Вот именно здесь надо открывать файлы, как бинарные. Расширение
.txt сбивает с толку, ибо никакие они у вас не текстовые.
1
|
1 / 1 / 0
Регистрация: 02.03.2014
Сообщений: 133
|
|
07.04.2017, 23:01 [ТС] | 11 |
Заработало, спасибо.
А почему? f.read и f.write не просто копируют биты файла в переменную, а как-то преобразуют их в зависимости от режима открытия?
0
|
Вездепух
11697 / 6376 / 1724
Регистрация: 18.10.2014
Сообщений: 16,080
|
|
07.04.2017, 23:10 | 12 |
Таковы правила. Если файл открыт в текстовом режиме, то производится распознавание и преобразование символов конца строки как при чтении, так и при записи. Это выполняется на самом нижнем уровне. т.е. даже сишные
fread и fwrite так себя ведут.
0
|
07.04.2017, 23:10 | |
07.04.2017, 23:10 | |
Помогаю со студенческими работами здесь
12
Тип данных float Тип памяти переменной float Почему 5/9=0, если тип float? тип float и вывод остатка через a % b Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |