![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| GIK |
|
||||
![]() Добрый человек ![]() ![]() Профиль Группа: Участник Сообщений: 985 Регистрация: 3.6.2005 Где: я только не небыв ал Репутация: нет Всего: 14 |
Всем привет.
Вот возникли пара простеньких вопросов по типам данных. 1) Еслть ли логика и смысл в преобразование больших данных в меньшие. Например int в byte.
как вам извесно byte имеет диапазон до 256, и алгоритм преобразование выглядит так: 257%256 (остаток деления числа на максимально)что дает 1. Используется ли в практике преобразование больших данных в меньшее? 2) Далее, когда я увидел это:
я совсем запутался, т.к. итог вроде как 100, а я ждал 100%256, учитывая вышеуказанное утверждение. Разве я не прав? -------------------- Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!! Программирование - это не деятельнось! Программирование - это состояние души! Бог - самый крутой программист. |
||||
|
|||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
1. byte имеет диапазон -128..127
2. 10*10 для компилятора означает перемножение двух int чисел и результат будет тоже целое. 3. преобразование (кастинг) необходимо, иначе компилятор выдаст ошибку - сообщение о возможной потери точности в операции присваивания. Делая кастинг вы даете знать компилятору, что вы в курсе о возможной потери данных. Это сообщение отредактировал(а) COVD - 24.12.2005, 17:06 |
|||
|
||||
| GIK |
|
||||||
![]() Добрый человек ![]() ![]() Профиль Группа: Участник Сообщений: 985 Регистрация: 3.6.2005 Где: я только не небыв ал Репутация: нет Всего: 14 |
Вот я о том же. int значение переобразуется в byte не по алгоритму 100%127 Результат d=(byte) (10*10); = 100 А почему?
Да, чет меня сглючило с этими остатками от деления
Вопрос не в этом, вопрос в том что логики и смысла преобразований int в byte к примеру на мой взгляд нету. Сам посуди, результат - это остаток от деления, не зависимо от начального число, будь то 10000 или 453. -------------------- Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!! Программирование - это не деятельнось! Программирование - это состояние души! Бог - самый крутой программист. |
||||||
|
|||||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
Честно говоря, вникать в алгоритм преобразования смысла нет.
Если целое число лежит в диапазоне -128..127, (например, 100) то присваивание произойдет без ошибок. Если же написать
то, естественно b не будет равно 400, так как это выходит за пределы допустимых значений byte. И какая разница, какой алгоритм и чему b будет равен? Целое уже нельзя однозначно восстановить, т.е. произошла потеря данных. Логика использования кастинга только в том, что , как я уже сказал, что программист сообщает компилятору, что он знает, что при присвоении целого числа байту возможна ошибка. После этого компилятор снимает с себя всякую ответственность за результат. Это сообщение отредактировал(а) COVD - 24.12.2005, 19:39 |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Только если нужна реальная экономия памяти, т.е. ты например используешь большие массивы чисел (порядка 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. |
|||
|
||||
| GIK |
|
|||
![]() Добрый человек ![]() ![]() Профиль Группа: Участник Сообщений: 985 Регистрация: 3.6.2005 Где: я только не небыв ал Репутация: нет Всего: 14 |
По второму вопросу понял.
Значит результат менее максимального диапазона не конвертица. ЗЫ Не подскажете какую литературу можно приобрести, чтобы разузнать как все ЭТО работает в корне. Т.е. все о байтах, где и как они хранятся, как происходит вычисления чисел когда они, к примеру, перемножаются. Я считаю что все это нужно, чтобы стать настоящим профессионалом. Всем спаибо за внимание -------------------- Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!! Программирование - это не деятельнось! Программирование - это состояние души! Бог - самый крутой программист. |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
В спецификации 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. |
|||
|
||||
| GIK |
|
|||
![]() Добрый человек ![]() ![]() Профиль Группа: Участник Сообщений: 985 Регистрация: 3.6.2005 Где: я только не небыв ал Репутация: нет Всего: 14 |
Большое спасибо.
Приобрету обязательно -------------------- Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!! Программирование - это не деятельнось! Программирование - это состояние души! Бог - самый крутой программист. |
|||
|
||||
| redrick |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 547 Регистрация: 7.1.2004 Где: Москва Репутация: 3 Всего: 5 |
GIK
она тооолстая и дорогая =) -------------------- Имею Мнение Хрен Оспоришь |
|||
|
||||
| x64 |
|
|||
|
Unregistered |
У меня теперь 64-битный процессор, AMD x64, что мне теперь делать? |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Для начала у тебя должна стоять 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. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |