vitus_wagner: My photo 2005 (Default)
[personal profile] vitus_wagner
Интересно, что количество бит в самом большом целочисленном типе, поддерживаемом современными компиляторами (int128_t), уже сравнялось с максимальным значением самого маленького (signed char).

Это к вопросу о том, как интерпретировать x << -1.

Мне пришли в голову две «естественные» интерпретации:

1. x << -1 = x >> 1.
2. x << -1 = x<< ((usigned что-то)-1) = x << 255 или x << 65535 и так далее.

В обоих случаях 1 << -1 = 0.

Но не все компиляторы с этим согласны. (понятно что по стандарту это undefined behavoir).

Date: 2016-04-06 02:11 pm (UTC)
livelight: (Default)
From: [personal profile] livelight
В данном случае неважно, do_something() может и заведомо не влиять на foo или ptr.
Суть в том, что это неправильный компилятор, который заранее решает, что предусловия второй части кода выполнены, а посему закроем глаза и будем надеяться на лучшее, а значит, иф из первой части кода не нужен.

Date: 2016-04-06 03:35 pm (UTC)
yurikhan: (Default)
From: [personal profile] yurikhan

Факт тот, что стандарт разрешает делать такие оптимизации, и что реальные компиляторы их делают.

Date: 2016-04-06 08:58 pm (UTC)
livelight: (lightning)
From: [personal profile] livelight
Я не совсем понял, что такое "post-classical compiler". Возможно, я слишком мало изучал ад и коровники, и слишком много - как оно должно быть по уму. Но все эти утверждения на тему "something unpredicatble can happen in this branch => this branch can be treated as unreachable" наводят меня на мысли, что упоролись или авторы стандарта языка Си, или автор статьи. Тут я поступаю как тот пост-классический компилятор и предполагаю таки второе.

Profile

vitus_wagner: My photo 2005 (Default)
vitus_wagner

August 2025

S M T W T F S
     1 2
3456789
10111213141516
17181920212223
24252627282930
31      

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 3rd, 2025 07:59 pm
Powered by Dreamwidth Studios