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

 
 
> >>, Что означает эта запись?
niktagor
сообщение Jul 1 2009, 16:01
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 24-06-09
Пользователь №: 50 601



Братцы, я с языком си знаком слабовато. Что означает вот эта запись? Подскажите пожалуйста.

*pDMA_DBP = (unsigned short)((unsigned int)sSPORT0_TX_Descriptor >> 16);
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Dreamer
сообщение Jul 24 2009, 08:14
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 13-01-06
Из: Санкт-Петербург
Пользователь №: 13 154



Цитата
С чего бы вдруг 0xC0 быть байтом?


С того, что его можно объявить как signed char. Мой пример именно для signed char.

Цитата
Константы такого рода считаются, как int-значения, а не char. А int это обычно 2 байта, а не один.

Не-а. Обычно длина типа int соответствует разрядности процессора, для которого сделан компилятор.
Для 32разрядных int будет 4 байта, для 16разрядных - 2 байта.

Константы, явно заданные в выражении, действительно являются типом int.
Я оговорился и не написал, что пример придназначен для типа signed char.

Цитата
А потому 0xC0 >> 2 == 0x30

Хорошо. Тогда пример специально для Вас: wink.gif

0хС000 >> 2 == 0xF000 (Конкретно для знакового 2байтового типа).




Вот вам еще пример кода:
Код
    char c = 0xC0;
    int i = c;
    i>>=2;

char и int в настройках компилятора стоят как знаковые.
Как вы думаете, чему будет равно i после выполнения кода? Думаете, 0x0030?
Не-а. Результат будет равен 0хFFF0.
wink.gif


--------------------
Все врут (с) /M.D.House/
Go to the top of the page
 
+Quote Post
Xenia
сообщение Jul 24 2009, 08:28
Сообщение #3


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Если это char, да еще и знаковый, то возражений у меня нет. Я же имела в виду, что выражение
if (0xC0 >> 2 == 0xF0)
было бы расценено IAR-компилятором как ложное, а
if (0xC0 >> 2 == 0x30)
как истинное.

P.S. IAR-компилятор для AVR8 понимает int, как двухбайтное знаковое целое, несмотря на то, что регистры имеют разрядность один байт.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- niktagor   >>   Jul 1 2009, 16:01
- - rezident   Переменная sSPORT0_TX_Descriptor приводится к типу...   Jul 1 2009, 16:59
|- - niktagor   Спасибо, все понял!   Jul 2 2009, 07:51
|- - demiurg_spb   То, что понял - это хорошо! Но очень полезно С...   Jul 2 2009, 09:20
- - defunct   >> - обозначает сдвиг вправо. x >> n ...   Jul 1 2009, 23:42
|- - rezident   Цитата(defunct @ Jul 2 2009, 05:42) Всегд...   Jul 2 2009, 09:50
|- - 777777   Цитата(defunct @ Jul 2 2009, 03:42) >...   Jul 2 2009, 10:30
|- - defunct   Цитата(777777 @ Jul 2 2009, 13:30) Правил...   Jul 2 2009, 12:12
|- - 777777   Цитата(defunct @ Jul 2 2009, 16:12) Cобсн...   Jul 3 2009, 10:44
|- - defunct   Цитата(777777 @ Jul 3 2009, 13:44) Так чт...   Jul 3 2009, 14:29
|- - 777777   Цитата(defunct @ Jul 3 2009, 18:29) Разни...   Jul 3 2009, 17:21
- - DpInRock   >> в Сях - это деление на степень двойки. Во...   Jul 2 2009, 02:16
- - DpInRock   ЦитатаВот так проще всего описать. Ключевое слово....   Jul 2 2009, 11:02
- - Dreamer   ЦитатаЕсли следовать стандарту, то получается, что...   Jul 24 2009, 07:38
|- - Xenia   Цитата(Dreamer @ Jul 24 2009, 10:38) Отсю...   Jul 24 2009, 07:53
|- - Сергей Борщ   Цитата(Xenia @ Jul 24 2009, 10:53) Думает...   Jul 24 2009, 08:08
- - Dreamer   ЦитатаЕсли это char, да еще и знаковый, то возраже...   Jul 24 2009, 08:39


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 15:14
Рейтинг@Mail.ru


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