реклама на сайте
подробности

 
 
> Глюк IAR или мой, приведение типов
VladimirYU
сообщение May 7 2008, 12:02
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782



В IAR AVR 4.12 столкнулся вот с чем:

// имею
int data = 0xabd6;

// хочу увеличить разрядность до 32 без знака
unsigned int tmp = (unsigned int) data;

// получаю tmp = 0x0000abd6, что и хотел

а теперь вместо 32 захотел увеличить разрядность до 64 без знака из исходного data
unsigned long long tmp = (unsigned int) data;

// получаю tmp = 0x6dba000000000000

?????????????
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 12)
Freeze Anti
сообщение May 7 2008, 12:13
Сообщение #2


Частый гость
**

Группа: Новичок
Сообщений: 153
Регистрация: 29-03-07
Из: Саратов
Пользователь №: 26 613



а long два раза стоит это опечатка или зачем?

а если отдать на усмотрение компилятора приведение типов, то есть записать

unsigned long tmp = data

что получается?


--------------------
!!! All you need is LOVE !!!
Go to the top of the page
 
+Quote Post
MrYuran
сообщение May 7 2008, 12:18
Сообщение #3


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата
unsigned long long tmp = (unsigned int) data;

Ну и чему вы удивляетесь?
int упорядочен по 2 байта, вот и получите!

Если уж приводить к типу, то хотя бы к такому же, то есть unsigned long long tmp =(unsigned long long)data


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение May 7 2008, 12:22
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(Freeze Anti @ May 7 2008, 16:13) *
а long два раза стоит это опечатка или зачем?


long long - это тип такой. Целое 64 разряда.
Go to the top of the page
 
+Quote Post
prottoss
сообщение May 7 2008, 13:01
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



У меня получилось как положено = 0x000000000000ABD6

IAR C/C++ Compiler for ARM
4.42A Evaluation (4.42.1.201)


--------------------
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 7 2008, 13:07
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(MrYuran @ May 7 2008, 15:18) *
Ну и чему вы удивляетесь?
int упорядочен по 2 байта, вот и получите!
Неверно. Тут не работа с указателями и числами в памяти.
Цитата(MrYuran @ May 7 2008, 15:18) *
Если уж приводить к типу, то хотя бы к такому же, то есть unsigned long long tmp =(unsigned long long)data
Снова неверно. Исходное число было знаковым, поэтому при таком преобразовании знак будет расширен в старшие байты. В вашем варианте приведение вообще не нужно - оно будет сделано автоматически.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
VladimirYU
сообщение May 7 2008, 13:10
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782



Цитата(MrYuran @ May 7 2008, 16:18) *
Ну и чему вы удивляетесь?
int упорядочен по 2 байта, вот и получите!

Если уж приводить к типу, то хотя бы к такому же, то есть unsigned long long tmp =(unsigned long long)data


Пробовал, не помогает, да это и не принципиально ИМХО. А выделенную фразу поясните, если нетрудно. Версия 4.12 для AVR.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение May 7 2008, 13:18
Сообщение #8


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(prottoss @ May 7 2008, 16:01) *
У меня получилось как положено = 0x000000000000ABD6

IAR C/C++ Compiler for ARM
4.42A Evaluation (4.42.1.201)

Повезло.
АРМ существо 32-разрядное, там вероятность "перекоса" 64р слов меньше, чем в 8-битном АВР, всего лишь 50х50

стоп...
Цитата
получаю tmp = 0x6dba000000000000

чё, на самом деле задом наперёд?
я чё-то не посмотрел сначала..
Тогда непонятно вообще


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
prottoss
сообщение May 7 2008, 13:39
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Проверил для AVR - опять правильный результат = 0x000000000000ABD6

IAR C/C++ Compiler for AVR
4.30A/W32 [Evaluation] (4.30.1.3)


--------------------
Go to the top of the page
 
+Quote Post
VladimirYU
сообщение May 8 2008, 07:37
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782



Прикрепленный файл  long_long.zip ( 38.37 килобайт ) Кол-во скачиваний: 191
Цитата(prottoss @ May 7 2008, 17:39) *
Проверил для AVR - опять правильный результат = 0x000000000000ABD6

IAR C/C++ Compiler for AVR
4.30A/W32 [Evaluation] (4.30.1.3)


Прикрепляю простой тестовый примерчик.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение May 8 2008, 07:49
Сообщение #11


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(VladimirYU @ May 8 2008, 10:37) *
Прикрепленный файл  long_long.zip ( 38.37 килобайт ) Кол-во скачиваний: 191


Прикрепляю простой тестовый примерчик.

Дык, ёлы-палы, отображение просто задом наперёд, а не данные

ps: а просто картинку нельзя было приклеить?


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
VladimirYU
сообщение May 8 2008, 08:00
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782



Цитата(MrYuran @ May 8 2008, 11:49) *
Дык, ёлы-палы, отображение просто задом наперёд, а не данные


Ok! Это видимо IARовцы так с 1 апреля поздравляют
Go to the top of the page
 
+Quote Post
VladimirYU
сообщение May 8 2008, 09:57
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782



Цитата(VladimirYU @ May 8 2008, 12:00) *
Ok! Это видимо IARовцы так с 1 апреля поздравляют

Посмотрел, в версии 5.10 эту прелесть убрали.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 20:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01471 секунд с 7
ELECTRONIX ©2004-2016