|
Запуск одного таймера от другого, stm32f103 |
|
|
2 страниц
< 1 2
|
 |
Ответов
(15 - 26)
|
Aug 14 2014, 05:54
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Цитата Можете привести пример, когда вам не хватит ширины константы 1UL? наверное не смогу... может через 100 лет для каких-то машин где будет тип экстралонг... я лично уверен что мои программы проработают не меньше  ... кстати проверил ((int32_t)1 << 31) - все честно, получаем минус максимум, или 0x80000000, а дальше нули, никаких неожиданностей если мы используем это как маску, если как число, то очевидное переполнение, что тоже ожидаемо.
|
|
|
|
|
Aug 14 2014, 09:58
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(Golikov A. @ Aug 14 2014, 11:54)  наверное не смогу... может через 100 лет для каких-то машин где будет тип экстралонг... я лично уверен что мои программы проработают не меньше  ... Ну, для экстралонга явное (uint32_t) тем более не поможет  Цитата(Golikov A. @ Aug 14 2014, 11:54)  кстати проверил ((int32_t)1 << 31) - все честно, получаем минус максимум, или 0x80000000, а дальше нули, никаких неожиданностей если мы используем это как маску, если как число, то очевидное переполнение, что тоже ожидаемо. Да, сейчас тоже не смог получить ошибочный результат. Но помню, что какие-то проблемы были. Так что лучше буду страховаться. Цитата(adnega @ Aug 14 2014, 03:00)  Уважаемые, тут недалеко есть аж два топика, где обсуждаются маски, библиотеки и биты)) (я сам там читатель) Всё, всё, уходим
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Aug 14 2014, 10:13
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
уходя крикну в закрывающуюся дверь  проблемы со сдвигом в права (0x80 >> 1) если компилятору стукнет что это знаковый тип, то вместо ожидаемых 0x40 будет 0xC0 а если его по какой то причине зарубит сделать арифметический сдвиг для знакового то 0x81 может переделать в 0xC1. но как добиться последнего я не очень в курсе, это если попросить разделить на 2, то он так может сделать.... но на самом деле букв в компутере дофига, и лишние UL никому не помешают
|
|
|
|
|
Aug 16 2014, 09:32
|

Профессионал
    
Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555

|
Цитата(Golikov A. @ Aug 14 2014, 00:23)  Long - не есть явный тип, там где int16 он 32, а где int32 - он 64. А сейчас 64 битные процессоры набирают обороты, того и гляди в 128 бит перейдет. вы бы лучше стандарт почитали! например на win64 и int и long остались 32 битными! а вот size_t и int_ptr_t уже 64 битные. Цитата проблемы со сдвигом в права (0x80 >> 1) если компилятору стукнет что это знаковый тип, в данном случае не стукнет, по многим причинам. смотрите стандарт
|
|
|
|
|
Aug 17 2014, 10:55
|

Профессионал
    
Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555

|
Цитата(Golikov A. @ Aug 17 2014, 08:53)  а вы только под win пишите? и как называется 64 битный целый тип? какой из стандартов вы предлагаете читать? это был гипотетический пример, потому что было лень писать много нулей не только! а win привел как пример того что разрядность целого типа слабо зависит от разрядности процессора! Для 64 битного линукса кстати long - 64 битный. 64 битный целый тип на сегодня - long long, но лучше конечно использовать stdint.h стандарт - С99 например, или новый С11 про пример - я же писал по многим причинам! одна из них - шестнадцатеричные константы считаются unsigned.
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|