IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

 
 Ответить  Открыть новую тему 
> 0xFF, язык Си
Тёмный Эльф
сообщение 18.01.2008 19:06
Сообщение #1


Влюблённый псих
***

Группа: Пользователи
Сообщений: 185
Пол: Женский
Реальное имя: Лейла

Репутация: -  1  +


Объясните плиз.

long int znachenie;
znachenie=0xF=15;
znachenie=0xFF=255;
znachenie=0xFFF=4095;
znachenie=0xFFFF=-1;
znachenie=0xFFFFF=-1;
....
(борландовский компиль)

Если 0xF=15 я понимаю (раз 15 соответв. F в шестнадцатеричной с.с.), то откуда взялись цифры 255, 4095, -1 не могу врубиться!!!

Сообщение отредактировано: Тёмный Эльф - 18.01.2008 19:29
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 18.01.2008 20:01
Сообщение #2


Гость






А теперь - то же самое запишем битами:

znachenie=0xF=15; // 0xF = 0000 0000 0000 1111 = (2^4) - 1
znachenie=0xFF=255; // 0xFF = 0000 0000 1111 1111 = (2^8) - 1
znachenie=0xFFF=4095; // 0xFFF = 0000 1111 1111 1111 = (2^12) - 1
znachenie=0xFFFF=-1; // 0xFFFF = 1111 1111 1111 1111


Переведи это в 10 c/c, и увидишь, откуда такие значения...
 К началу страницы 
+ Ответить 
Тёмный Эльф
сообщение 18.01.2008 20:33
Сообщение #3


Влюблённый псих
***

Группа: Пользователи
Сообщений: 185
Пол: Женский
Реальное имя: Лейла

Репутация: -  1  +


спасибо я поняла как считать, просто непонятно почему 0xFFFF выдает вместо 65 535 значение -1. Это как-то связано с переполнением типа int?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 18.01.2008 20:35
Сообщение #4


Гость






Это связано с тем, что у тебя на машине размер long int равен двум байтам (я не знаю, что это за компилятор и что за архитектура), и действительно имеет место переполнение...
 К началу страницы 
+ Ответить 
xds
сообщение 19.01.2008 6:37
Сообщение #5


N337
****

Группа: Пользователи
Сообщений: 737
Пол: Мужской

Репутация: -  26  +


Цитата(Тёмный Эльф @ 19.01.2008 3:33) *

спасибо я поняла как считать, просто непонятно почему 0xFFFF выдает вместо 65 535 значение -1. Это как-то связано с переполнением типа int?
Потому что ты выводишь их как int (скорее всего пишешь в printf %d вместо %ld). А long int у тебя равен 4 байтам.


--------------------
The idiots are winning.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 26.04.2024 1:45
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"