- 1
- 2
byteL = (length & (0x00ff));
byteH = (length - byteL)>>BITS_IN_BYTE;
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+139
byteL = (length & (0x00ff));
byteH = (length - byteL)>>BITS_IN_BYTE;
Вдруг биты справа полезут прямо из компьютера, давайте вычтем!
Макрос BITS_IN_BYTE особенно радует!
Кстати эту фигню гцц компилит в красивый код:
А вдруг?
А вдруг?
http://govnokod.ru/14174#comment203332
Многие ЦСП имеют CHAR_BIT равным 16 или более[1][2]
это только на кривых/нишевых платформах которым по барабану совместимость во всем остальным, char может быть более чем один байт.
если проц не умеет байты, что уже случалось не раз, то компилер должен эмулировать.
Чем один октет? Не зря же во всяких RFC пишут именно "октет" а не "байт"...
я где-то видел флеймы с тех времен, где то ли Керниган то ли Риччи флеймил на чудаков на тему что char в С есть и останется 8 байт, и идите в Ж с вашими извращениями. это были как раз те времена когда все железо начало стандартизироватся на 8ми битном байте.
Процитирую http://www.parashift.com/c++-faq/intrinsic-types.html:
26.1. Can sizeof(char) be 2 on some machines? For example, what about double-byte characters?
No, sizeof(char) is always 1. Always. It is never 2. Never, never, never.
Even if you think of a "character" as a multi-byte thingy, char is not. sizeof(char) is always exactly 1. No exceptions, ever.
26.4. But, but, but what about machines where a char has more than 8 bits? Surely you're not saying a C++ byte might have more than 8 bits, are you?!?
Yep, that's right: a C++ byte might have more than 8 bits.
The C++ language guarantees a byte must always have at least 8 bits. But there are implementations of C++ that have more than 8 bits per byte.
26.5. Okay, I could imagine a machine with 9-bit bytes. But surely not 16-bit bytes or 32-bit bytes, right?
Wrong.
I have heard of one implementation of C++ that has 64-bit "bytes." You read that right: a byte on that implementation has 64 bits. 64 bits per byte. 64. As in 8 times 8.
And yes, you're right, combining with the above would mean that a char on that implementation would have 64 bits.
Ну и самое интересное в 26.6, где рассказывается про PDP-10 с 36-битовыми словами, где компилятор эмулирует 9-битовые байты.