- 1
- 2
/* To the unenlightened: This sets the 20 MSBs to 0 for sanity's sake. */
return four_bytes_to_uint32(four_byte_array) & ~(~0 << 12);
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+136
/* To the unenlightened: This sets the 20 MSBs to 0 for sanity's sake. */
return four_bytes_to_uint32(four_byte_array) & ~(~0 << 12);
Так приказали K&R.
Pythoner 10.12.2014 19:24 # +2
codemonkey 11.12.2014 10:28 # +1
kipar 11.12.2014 13:07 # 0
TarasB 11.12.2014 13:32 # 0
kipar 11.12.2014 16:32 # 0
---
С другой стороны, сдвиг на 32 это наверное UB, так что все равно не пойдет.
bormand 11.12.2014 18:37 # 0
Implementation defined вроде, но не особо лучше UB'а. Где-то зануляет регистр, как и положено (вроде бы, если числа - константы, то так и будет), где-то вообще ничего не делает (barrel shifter'ы x86 и многих других процов тупо обрезают сдвиг на 5 (32-битный регистр) или 6 (64-битный регистр) бит, поэтому в 32-битном режиме a << 32 == a << 0, a << 33 == a << 1 и т.п.).
kipar 11.12.2014 18:45 # 0
Так что UB, компилятор может смело форматировать диск.
bormand 11.12.2014 21:12 # 0
Надо написать такой компилятор для отучения от UB'ов.
3.14159265 11.12.2014 22:20 # 0
План должен быть чуть сложнее:
а) пишем компилятор, которым все хотят и будут пользоваться
б) в (авто!)обновлении добавляем UB, который ворует и высылает нам пароли и номера кредиток
bormand 12.12.2014 01:25 # 0
Pythoner 11.12.2014 15:16 # 0
С вычислением?
Да ладно, эти константы за секунду в уме просчитываются.
codemonkey 11.12.2014 15:57 # +2
someone 10.12.2014 19:34 # +1
Big-endian или little-endian?
bormand 10.12.2014 23:08 # +1