Перейти к содержанию
    

Глюк IAR или мой

В 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

 

?????????????

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

unsigned long tmp = data

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

unsigned long long tmp = (unsigned int) data;

Ну и чему вы удивляетесь?

int упорядочен по 2 байта, вот и получите!

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

long long - это тип такой. Целое 64 разряда.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну и чему вы удивляетесь?

int упорядочен по 2 байта, вот и получите!

Неверно. Тут не работа с указателями и числами в памяти.

Если уж приводить к типу, то хотя бы к такому же, то есть unsigned long long tmp =(unsigned long long)data
Снова неверно. Исходное число было знаковым, поэтому при таком преобразовании знак будет расширен в старшие байты. В вашем варианте приведение вообще не нужно - оно будет сделано автоматически.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну и чему вы удивляетесь?

int упорядочен по 2 байта, вот и получите!

 

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

 

Пробовал, не помогает, да это и не принципиально ИМХО. А выделенную фразу поясните, если нетрудно. Версия 4.12 для AVR.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

IAR C/C++ Compiler for ARM

4.42A Evaluation (4.42.1.201)

Повезло.

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

 

стоп...

получаю tmp = 0x6dba000000000000

чё, на самом деле задом наперёд?

я чё-то не посмотрел сначала..

Тогда непонятно вообще

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

IAR C/C++ Compiler for AVR

4.30A/W32 [Evaluation] (4.30.1.3)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

long_long.zip

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

 

IAR C/C++ Compiler for AVR

4.30A/W32 [Evaluation] (4.30.1.3)

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

long_long.zip

 

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Ok! Это видимо IARовцы так с 1 апреля поздравляют

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ok! Это видимо IARовцы так с 1 апреля поздравляют

Посмотрел, в версии 5.10 эту прелесть убрали.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...