Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Преобразование данных, Есть ли смысл? 
:(
    Опции темы
GIK
  Дата 24.12.2005, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

Репутация: нет
Всего: 14



Всем привет.
Вот возникли пара простеньких вопросов по типам данных.
1) Еслть ли логика и смысл в преобразование больших данных в меньшие. Например int в byte.

Код

int i=257;
byte b;
b = (byte) i;

как вам извесно byte имеет диапазон до 256, и алгоритм преобразование выглядит так: 257%256 (остаток деления числа на максимально)что дает 1.

Используется ли в практике преобразование больших данных в меньшее?

2) Далее, когда я увидел это:
Код

byte d=10;
byte b=10;
d=(byte) (10*10);

я совсем запутался, т.к. итог вроде как 100, а я ждал 100%256, учитывая вышеуказанное утверждение.
Разве я не прав?


--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
COVD
Дата 24.12.2005, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



1. byte имеет диапазон -128..127
2. 10*10 для компилятора означает перемножение двух int чисел и результат будет тоже целое.
3. преобразование (кастинг) необходимо, иначе компилятор выдаст ошибку - сообщение о возможной потери точности в операции присваивания. Делая кастинг вы даете знать компилятору, что вы в курсе о возможной потери данных.

Это сообщение отредактировал(а) COVD - 24.12.2005, 17:06
PM MAIL   Вверх
GIK
Дата 24.12.2005, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

Репутация: нет
Всего: 14



Цитата
10*10 для компилятора означает перемножение двух int чисел и результат будет тоже целое.

Вот я о том же.
int значение переобразуется в byte не по алгоритму 100%127
Результат d=(byte) (10*10); = 100
А почему?
Цитата
byte имеет диапазон -128..127

Да, чет меня сглючило с этими остатками от деления

Цитата
преобразование (кастинг) необходимо, иначе компилятор выдаст ошибку - сообщение о возможной потери точности в операции присваивания. Делая кастинг вы даете знать компилятору, что вы в курсе о возможной потери данных.

Вопрос не в этом, вопрос в том что логики и смысла преобразований int в byte к примеру на мой взгляд нету. Сам посуди, результат - это остаток от деления, не зависимо от начального число, будь то 10000 или 453.




--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
COVD
Дата 24.12.2005, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



Честно говоря, вникать в алгоритм преобразования смысла нет. smile

Если целое число лежит в диапазоне -128..127, (например, 100) то присваивание произойдет без ошибок. Если же написать
Код

byte b = (byte)(20*20);


то, естественно b не будет равно 400, так как это выходит за пределы допустимых значений byte. И какая разница, какой алгоритм и чему b будет равен? Целое уже нельзя однозначно восстановить, т.е. произошла потеря данных.

Логика использования кастинга только в том, что , как я уже сказал, что программист сообщает компилятору, что он знает, что при присвоении целого числа байту возможна ошибка. После этого компилятор снимает с себя всякую ответственность за результат.

Это сообщение отредактировал(а) COVD - 24.12.2005, 19:39
PM MAIL   Вверх
LSD
Дата 25.12.2005, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(GIK @ 24.12.2005, 16:12)
Еслть ли логика и смысл в преобразование больших данных в меньшие.

Только если нужна реальная экономия памяти, т.е. ты например используешь большие массивы чисел (порядка 10^6 и более), тогда действительно имеет смысл задуматься об экономии памяти. Иначе смысла нет, т.к. 32-х битные процессоры наиболее эффективно работают с 32-х разрядными числами.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
GIK
Дата 25.12.2005, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

Репутация: нет
Всего: 14



По второму вопросу понял.
Значит результат менее максимального диапазона не конвертица.

ЗЫ
Не подскажете какую литературу можно приобрести, чтобы разузнать как все ЭТО работает в корне. Т.е. все о байтах, где и как они хранятся, как происходит вычисления чисел когда они, к примеру, перемножаются.
Я считаю что все это нужно, чтобы стать настоящим профессионалом.
Всем спаибо за внимание smile


--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
LSD
Дата 25.12.2005, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(GIK @ 25.12.2005, 11:29)
Не подскажете какую литературу можно приобрести, чтобы разузнать как все ЭТО работает в корне. Т.е. все о байтах, где и как они хранятся, как происходит вычисления чисел когда они, к примеру, перемножаются.

В спецификации JVM это не оговорено. Каждая реализация может это делать так как считает нужным, просто требуется чтобы результат был определенным и все.

Обычно это реализуют так, как быстрее всего для данной платформы. Т.е. на x86 совместимых машинах, int хранятся как little-endian, а на UltraSparc и PowerPC как big-endian, и т.д. Если интерестно возьми учебники по ассемблеру и почитай, там объясняется архитектура процессора и как происходят вычисления, лично мне понравился Рудаков, Финогенов - Программируем на языке ассембрера IBM PC.
Добавлено @ 11:42
Совсем забыл! Есть еще замечательная книжка: Э.Таненбаум Архитектура компьютера. Там рассматриваются и сравниваются все современные архитектуры компьютеров.

Это сообщение отредактировал(а) LSD - 25.12.2005, 11:36


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
GIK
Дата 25.12.2005, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

Репутация: нет
Всего: 14



Большое спасибо.
Приобрету обязательно smile


--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
redrick
Дата 25.12.2005, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 547
Регистрация: 7.1.2004
Где: Москва

Репутация: 3
Всего: 5



GIK
она тооолстая и дорогая =)


--------------------
Имею Мнение Хрен Оспоришь   
PM MAIL ICQ   Вверх
x64
Дата 25.12.2005, 20:36 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(LSD @ 25.12.2005, 00:56)
Иначе смысла нет, т.к. 32-х битные процессоры наиболее эффективно работают с 32-х разрядными числами.

У меня теперь 64-битный процессор, AMD x64, что мне теперь делать?
  Вверх
LSD
Дата 25.12.2005, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(x64 @ 25.12.2005, 20:36)
У меня теперь 64-битный процессор, AMD x64, что мне теперь делать?

Для начала у тебя должна стоять 64-х разрядная ОС и 64-х разрядная JVM, иначе не стоит даже пытаться.

А дальше наваяй некий тестик (например перемножение 2-х матриц) и попробуй посмотреть с каким типом int или long происходит быстрее.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0530 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.