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

 
 
> ANSI С
Буратино
сообщение Apr 29 2011, 08:48
Сообщение #1


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

Группа: Свой
Сообщений: 1 433
Регистрация: 27-10-08
Из: Украина, Киев
Пользователь №: 41 215



a] Есть переменная "Keys" с типом long long (64bits), в алгоритме понадобилось выставить в единички все разряды. Правильно ли я делаю:
Код
typedef  unsigned  long long  INT64U;   /* Unsigned 64 bit value  */
...
Keys = ~(INT64U)0;


b] Можно ли использовать MODE_CONTR в качестве ключа в свиче? Ругается компилятор однако..
Код
#define MODE_CONTR 1;

...
void FSMGeneral (void) {

    switch (Mode) {
        case MODE_CONTR:
            if (MsgGetMessage (MSG_SEND_COMMAND) == 1) {
                switch (Get_Type_Commands (Keys)) {
...


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Буратино
сообщение May 5 2011, 12:27
Сообщение #2


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

Группа: Свой
Сообщений: 1 433
Регистрация: 27-10-08
Из: Украина, Киев
Пользователь №: 41 215



Есть такая функция:
Код
...
    typedef  unsigned  long       INT32U;   /* Unsigned 32 bit value                 */
    INT32U Leds;
...
void set_bit (INT08U number) {
    Leds = 0;
    Leds |= (1 << number);
}
...


Если аргумент больше чем 0x0E, то получаю странные результаты. В чем может быть причина? Спасибо!


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
msalov
сообщение May 5 2011, 12:40
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045



Цитата(Буратино @ May 5 2011, 15:27) *
Если аргумент больше чем 0x0E, то получаю странные результаты. В чем может быть причина? Спасибо!

Видимо у вас int имеет разрядность 16 бит. Таким образом 1, которая имеет тип инт, при сдвиге переполняется и получается 0, хотя вы ожидаете 1 в старших разрядах. Лечится очень просто - укажите что 1 у вас не инт, а лонгинт.

Код
    Leds |= (1UL << number);

Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Буратино   ANSI С   Apr 29 2011, 08:48
- - AHTOXA   Цитата(Буратино @ Apr 29 2011, 14:48) b] ...   Apr 29 2011, 09:30
|- - Буратино   Цитата(AHTOXA @ Apr 29 2011, 12:30) Он на...   Apr 29 2011, 10:09
- - Сергей Борщ   QUOTE (Буратино @ Apr 29 2011, 11:48) a] ...   Apr 29 2011, 10:10
|- - Палыч   Цитата(Буратино @ May 5 2011, 16:27) В че...   May 5 2011, 12:39
- - sergeeff   Кодvoid set_bit (INT08U number) { Leds =...   May 5 2011, 12:39
- - Буратино   Спасибо мужики ,все зафурычило! Буду иметь в ...   May 5 2011, 12:45
|- - sergeeff   Цитата(Буратино @ May 5 2011, 16:45) Спас...   May 5 2011, 12:52
- - Буратино   Файлов limits.h куча, на какой именно смотреть? Ск...   May 21 2011, 15:21
|- - Idle   Цитата(Буратино @ May 21 2011, 19:21) Ска...   May 21 2011, 15:40
- - Буратино   Не знаю, что там за стандарты, но с long long одни...   May 21 2011, 16:53
- - ReAl   «Какой такой козырёк?» Код#include <stdint.h...   May 22 2011, 15:02
- - Буратино   Еще одна интересная особенность: если я объявляю и...   May 23 2011, 05:59
- - aaarrr   Немного не в тему, но все же: Буратино, зачем рабо...   May 23 2011, 06:15
- - Буратино   Цитата(aaarrr @ May 23 2011, 09:15) Немно...   May 23 2011, 06:49


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

 


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


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