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

 
 
> >>, Что означает эта запись?
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
Ответов
defunct
сообщение Jul 1 2009, 23:42
Сообщение #2


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



>> - обозначает сдвиг вправо.

x >> n
сдвиг переменной x вправо на n разрядов.

пример:
1100 >> 1 = 0110

Цитата
арифметический сдвиг вправо

Всегда думал что над (unsigned int) может производиться только строго логический сдвиг. Арифметический же должен выполняться исключительно над (signed) переменными.

собсно не сложно в этом убедиться:

signed int x1 = 0x80000000;
unsigned int x2 = 0x80000000;

printf("x1 >> 3 = 0x%x\nx2 >> 3 = 0x%x", x1 >> 3, x2 >> 3);

результат:
x1 >> 3 = 0xF0000000 - арифметический сдвиг
x2 >> 3 = 0x10000000 - логический сдвиг
Go to the top of the page
 
+Quote Post
777777
сообщение Jul 2 2009, 10:30
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(defunct @ Jul 2 2009, 03:42) *
>> - обозначает сдвиг вправо.

x >> n
сдвиг переменной x вправо на n разрядов.

пример:
1100 >> 1 = 0110

Правильнее (чтобы не вводить людей в заблуждение) написать так:
00001100 >> 1 = 00000110


Потому что если число знаковое, то сдвиг распространяет знак:
1100 >> 1 = 1110

Правда, если говорить строго, то это implementation defined, но в большинстве нормальных компиляторов сделано именно так.

Цитата(DpInRock @ Jul 2 2009, 06:16) *
>> в Сях - это деление на степень двойки. Вот так проще всего описать.

Ни в коем случае. Это грубая, хотя и очень распространеная ошибка.

-3 / 2 = -1
-3 >> 1 = -2

Так понятно?

Сообщение отредактировал 777777 - Jul 2 2009, 10:32
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
|- - rezident   Цитата(defunct @ Jul 2 2009, 05:42) Всегд...   Jul 2 2009, 09:50
|- - 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   ЦитатаС чего бы вдруг 0xC0 быть байтом? С того, ч...   Jul 24 2009, 08:14
|- - Xenia   Если это char, да еще и знаковый, то возражений у ...   Jul 24 2009, 08:28
- - Dreamer   ЦитатаЕсли это char, да еще и знаковый, то возраже...   Jul 24 2009, 08:39


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

 


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


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