Блог пользователя CFnenuzhen

Автор CFnenuzhen, история, 9 лет назад, По-русски

1) Можно ли использовать signed типы данных для хеширования? Не создает ли это ситауаций, когда хеши не совпадают (особенно если пользоваться всеми прелестями хешей, вроде поиска хеша подстроки за O(1))?

2) Почему в G++ операции с unsinged long long заметно тормознутее, чем с signed long long?

  • Проголосовать: нравится
  • +13
  • Проголосовать: не нравится

»
9 лет назад, # |
  Проголосовать: нравится +16 Проголосовать: не нравится

Вообще переполнение signed — undefined behavior. Но у меня проблем никогда не было, если забывал дописывать unsigned.

»
9 лет назад, # |
  Проголосовать: нравится +24 Проголосовать: не нравится

Обычно использовать нельзя, потому что переполнение целых типов со знаком — неопределённое поведение.

Производительность может различаться, потому что для беззнаковых типов включаются одни оптимизации и выключаются другие, а для знаковых типов — наоборот. Например,

if (i + 1 < 2)

можно соптимизировать в i < 1, если isigned, и нельзя, если iunsigned (это следует из первого абзаца). Однако редко когда скорость работы будет сильно отличаться. Надо использовать то, что лучше подходит по логике.