- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
uint8_t CRC_1wire(uint8_t * crcbuff, uint32_t crcLen) {
uint8_t Tabl_CRC[] = {0....};
uint8_t crc = 0;
uint32_t i;
for (i = 0; i < crcLen; i++) {
if ((crc ^ (uint8_t) (crcbuff[i])) > 255) {
printf("ERROR CRC calc");
exit(-1);
}
crc = Tabl_CRC[crc ^ (uint8_t) (crcbuff[i])];
}
return crc;
}
Ну формально могут, стандарт позволяет. Если поискать - наверное даже найдёшь какую-нибудь DSP'шку с 32/64-битным байтом. Но там этот код просто не скомпилится, т.к. uint8_t там не будет.
Кстати, по этой же причине во всяких RFC пишут не "байт", а "октет".
Сам код здесь никому не интересен.
Из этого следует, что вы делаете правильные выводы из неправильных предпосылок.
Надо смотреть, что написано в стандарте, а не угадывать поведение исходя из циферки в типе.
В стандарте С99 написано
7.18.1.1 Exact-width integer types
1. The typedef name intN_t designates a signed integer type with widthN, no padding bits, and a two’s complement representation. Thus, int8_t denotes a signed integertype with a width of exactly 8 bits.
2. The typedef name uintN_t designates an unsigned integer type with widthN. Thus, uint24_t denotes an unsigned integer type with a width of exactly 24 bits.
3. These types are optional. However, if an implementation provides integer types with widths of 8, 16, 32, or 64 bits, no padding bits, and (for the signed types) that have a two’scomplement representation, it shall define the corresponding typedef names.
Т.е. uint8_t если есть, то содержит ровно 8 бит. Потому, что так говорит стандарт, а не потому, что в названии типа есть цифра 8.
Два: gcc умеет махать шашкой :)
P.S. Как же ему, бедному, трудно работать с октетами... Напишешь movb (%rsp, %rax), %al - создастся ложная зависимость от старого значения eax, код медленнее станет...
вдрух xorb или ещё какой-нить там LD/ST сглючит, не туда запишет...
Да у тебя же баттхерт.
> вдрух
Ну если UB будет где-нибудь выше по коду - там и не такая гадость вылезти может...
Ну написал чувак эту проверку. Ну ок, лишняя. Но это же тривиально и скучно. Гцц вон даже ворнинг на неё показывает. В итоге по теме сказать нечего, вот и обсуждаем всякую фигню вокруг да около.
>> Ну написал чувак
две ашыпки. вместо "ч" должно быть "м", а вместо "в" должно быть "д".
>> Но это же тривиально и скучно
тем не менее, тех, кто начинается с буквы "м", надо ставить на место.
>> вот и обсуждаем всякую фигню вокруг да около
ну давай нефигню обсуждать...
...
не, я понимаю, что бывают мудаки, которые пишут 8, а "на самом деле" 9, но не до такой же степени, господа "программисты"
а мне по нраву обозначения в стиле 'u8", писать удобнее .)
типа uint8_t?
предлагаю следующие варианты ответов
- для меня это очень сложно, я только до тлёх считать научился
- 11 (в десятичной системе счисления)
- зависит, с какой стороны посмотреть
- 11 (в семяричной системе счисления)
В топике написано
> sometimes byte can be more than eight bits.
Формально это так, в "байте" в том смысле, которым его понимает стандарт, может быть больше 8 бит.
Пруфы из стандарта:
3.6
1 byte
addressable unit of data storage large enough to hold any member of the basic character set of the execution environment
2 NOTE 1 - It is possible to express the address of each individual byte of an object uniquely.
3 NOTE 2 - A byte is composed of a contiguous sequence of bits, the number of which is implementation-defined. The least significant bit is called the low-order bit;the most significant bit is called the high-order bit.
> в переменной типа uint8_t
А вот тут уже может быть только 8 бит.
Это ты сам перепутал байты и uint8_t.
чо, серьёзно? блин, я не верю!!! вдруг 9 - и тогда >255
докажи, что в переменную размером 8 бит может влезть число 555... давай, смелее, пианэр.
Количество бит - это количество уменьшений неопределённости вдвое, числа здесь - штука побочная.
Я могу впихнуть 555 даже в однобитовую переменную. Скажем, если true, то 555, если false, то 91.
P.S. Кстати, тебе не попадались 8-битные флоаты? https://en.wikipedia.org/wiki/Minifloat
> и в 0 бит можно уложиться
Интересно, до чего можно дойти с таким настроем?
Нулевой шаг - биты формируют число, записанное в двоичной системе.
Первый шаг - уменьшение битности для разрежения покрываемого диапазона.
Второй шаг - ноль бит для определённого числа, перенесение значения числа в "голову".
Дальше можно, скажем, задать в C++ struct one; struct zero; typedef<typename x, typename y> struct bitand { ... }; и т.д. и перенести вычисления в метапрограмму.
Был ещё вероятностный счётчик, который без всяких грязных трюков с метаинформацией честно использовал n>0 бит, чтобы посчитать до 2^(n+k), k>0.
ПС - семен сменил ник на minixoid?
http://www.grammarly.com/handbook/grammar/adjectives-and-adverbs/19/sometime-sometimes-and-some-time/
sometime = когда-нибудь
sometimes = иногда
some time = в течении какого-то периода времени.
Если пишешь sometime, то пиши в Future Simple, блджад.
поэтому для особо грамотных специально придумали symbol такой - 8, дак и то тупняк на говнокоде
~Ваш кэп~
>> А вот тут уже может быть только 8 бит.
да вы гоните. не может такого быть, чтобы в переменной типа uint8_t было 8 бит, это же бред полный. все комментаторы уже давно осознали, что их там может быть сколько угодно, например, 5. или 7. или 11. или вы всё ещё тупите?
чойта я мальца обшибся в ацэнке шыроты контингента... аказываеццо, тутоньки не только "программисты" и "юмористы", а ишшо и "лингвисты"... прям не знаю, куда девацца
ну, написал бы я "sumtyme byte can bloat upto 123 bits"...
к какой букофке ты бы прикопался?
и столько лишних нажатий на клавиатуру.
я представляю, какой бы srach случился, если б я написал
megabyte, или, боже упаси, мибибайт.
тут, блин, с uint8_t, как выяснилось, "проблемы"... зайобибайтим енто дело, любители "стандартов"?..