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

 
 
> инвертировать один бит
sergey sva
сообщение Feb 11 2010, 09:48
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Нужно инвертировать один бит, в переменной, подозреваю что делается очень просто smile.gif, но что то не соображу как.

#define dataflag (1<<6)
ReturnValue =(ReturnValue ~ dataflag);
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
yurmala
сообщение Mar 2 2011, 05:57
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 65
Регистрация: 9-02-11
Из: Трехгорный
Пользователь №: 62 814



а такая конструкция работает?
FIO0PIN ^= (1<<19);
что-то при отладке через keil смотрю - инвертируются какие-то левые биты порта 0, но не 19-й...
Go to the top of the page
 
+Quote Post
_Bill
сообщение Mar 3 2011, 06:37
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(yurmala @ Mar 2 2011, 09:57) *
а такая конструкция работает?
FIO0PIN ^= (1<<19);
что-то при отладке через keil смотрю - инвертируются какие-то левые биты порта 0, но не 19-й...

1L<<19 Или нет?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 3 2011, 07:17
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (_Bill @ Mar 3 2011, 08:37) *
1L<<19 Или нет?
Или нет. int 32-битный. long также 32-битный. Даже для сдвига на 31 бит достаточно 1U<<31, для меньших можно и без квалификаторов. L пользы не принесет.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
_Bill
сообщение Mar 3 2011, 07:47
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(Сергей Борщ @ Mar 3 2011, 11:17) *
Или нет. int 32-битный. long также 32-битный. Даже для сдвига на 31 бит достаточно 1U<<31, для меньших можно и без квалификаторов. L пользы не принесет.

А почему L пользы не принесет, а U - принесет? Какая между ними разница при 32-х разрядах?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 3 2011, 10:04
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (_Bill @ Mar 3 2011, 09:47) *
А почему L пользы не принесет, а U - принесет?
L пользы не принесет потому что 1 что с ним, что без него 32-битная знаковая. А U дает unsigned 1, нет предупреждения "операция приводит к смене знака".


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 13:13
Рейтинг@Mail.ru


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