- 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;
}
bormand 06.02.2016 13:16 # 0
Ну формально могут, стандарт позволяет. Если поискать - наверное даже найдёшь какую-нибудь DSP'шку с 32/64-битным байтом. Но там этот код просто не скомпилится, т.к. uint8_t там не будет.
tucvbif 06.02.2016 17:38 # 0
bormand 06.02.2016 17:42 # +4
Кстати, по этой же причине во всяких RFC пишут не "байт", а "октет".
Soul_re@ver 06.02.2016 17:43 # +1
minixoid 08.02.2016 10:25 # −2
Soul_re@ver 08.02.2016 12:41 # +2
Сам код здесь никому не интересен.
minixoid 08.02.2016 13:18 # −1
Antervis 08.02.2016 13:43 # +2
roman-kashitsyn 08.02.2016 14:30 # +1
minixoid 08.02.2016 14:33 # −2
roman-kashitsyn 08.02.2016 14:45 # +5
Из этого следует, что вы делаете правильные выводы из неправильных предпосылок.
Надо смотреть, что написано в стандарте, а не угадывать поведение исходя из циферки в типе.
В стандарте С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.
minixoid 08.02.2016 14:39 # −1
bormand 08.02.2016 18:16 # +1
bormand 08.02.2016 18:25 # +4
Два: gcc умеет махать шашкой :)
P.S. Как же ему, бедному, трудно работать с октетами... Напишешь movb (%rsp, %rax), %al - создастся ложная зависимость от старого значения eax, код медленнее станет...
minixoid 08.02.2016 18:54 # −4
вдрух xorb или ещё какой-нить там LD/ST сглючит, не туда запишет...
bormand 08.02.2016 19:13 # 0
Да у тебя же баттхерт.
> вдрух
Ну если UB будет где-нибудь выше по коду - там и не такая гадость вылезти может...
Ну написал чувак эту проверку. Ну ок, лишняя. Но это же тривиально и скучно. Гцц вон даже ворнинг на неё показывает. В итоге по теме сказать нечего, вот и обсуждаем всякую фигню вокруг да около.
minixoid 08.02.2016 19:30 # −7
>> Ну написал чувак
две ашыпки. вместо "ч" должно быть "м", а вместо "в" должно быть "д".
>> Но это же тривиально и скучно
тем не менее, тех, кто начинается с буквы "м", надо ставить на место.
>> вот и обсуждаем всякую фигню вокруг да около
ну давай нефигню обсуждать...
minixoid 08.02.2016 19:14 # −1
minixoid 08.02.2016 10:24 # −2
minixoid 08.02.2016 10:24 # −2
Steve_Brown 08.02.2016 11:02 # 0
...
Soul_re@ver 08.02.2016 13:54 # +5
mittorn 20.02.2016 20:51 # 0
guest 06.02.2016 19:59 # 0
minixoid 07.02.2016 10:27 # −1
minixoid 08.02.2016 13:40 # −1
не, я понимаю, что бывают мудаки, которые пишут 8, а "на самом деле" 9, но не до такой же степени, господа "программисты"
Soul_re@ver 08.02.2016 13:55 # +3
minixoid 08.02.2016 14:20 # −1
а мне по нраву обозначения в стиле 'u8", писать удобнее .)
minixoid 08.02.2016 14:46 # −4
типа uint8_t?
предлагаю следующие варианты ответов
- для меня это очень сложно, я только до тлёх считать научился
- 11 (в десятичной системе счисления)
- зависит, с какой стороны посмотреть
- 11 (в семяричной системе счисления)
roman-kashitsyn 08.02.2016 14:53 # +4
В топике написано
> 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.
minixoid 08.02.2016 15:02 # −3
чо, серьёзно? блин, я не верю!!! вдруг 9 - и тогда >255
докажи, что в переменную размером 8 бит может влезть число 555... давай, смелее, пианэр.
roman-kashitsyn 08.02.2016 15:09 # +5
minixoid 08.02.2016 15:15 # −5
CHayT 08.02.2016 15:41 # +5
minixoid 08.02.2016 16:31 # −5
1024-- 08.02.2016 22:25 # +3
Количество бит - это количество уменьшений неопределённости вдвое, числа здесь - штука побочная.
Я могу впихнуть 555 даже в однобитовую переменную. Скажем, если true, то 555, если false, то 91.
bormand 08.02.2016 22:53 # +1
P.S. Кстати, тебе не попадались 8-битные флоаты? https://en.wikipedia.org/wiki/Minifloat
Propovednik_01 08.02.2016 22:56 # −1
1024-- 09.02.2016 20:42 # 0
> и в 0 бит можно уложиться
Интересно, до чего можно дойти с таким настроем?
Нулевой шаг - биты формируют число, записанное в двоичной системе.
Первый шаг - уменьшение битности для разрежения покрываемого диапазона.
Второй шаг - ноль бит для определённого числа, перенесение значения числа в "голову".
Дальше можно, скажем, задать в C++ struct one; struct zero; typedef<typename x, typename y> struct bitand { ... }; и т.д. и перенести вычисления в метапрограмму.
Был ещё вероятностный счётчик, который без всяких грязных трюков с метаинформацией честно использовал n>0 бит, чтобы посчитать до 2^(n+k), k>0.
kegdan 11.02.2016 09:52 # 0
ПС - семен сменил ник на minixoid?
minixoid 08.02.2016 16:38 # −4
http://www.grammarly.com/handbook/grammar/adjectives-and-adverbs/19/sometime-sometimes-and-some-time/
Soul_re@ver 08.02.2016 17:51 # 0
sometime = когда-нибудь
sometimes = иногда
some time = в течении какого-то периода времени.
Если пишешь sometime, то пиши в Future Simple, блджад.
minixoid 08.02.2016 17:55 # −4
bormand 08.02.2016 18:06 # 0
minixoid 08.02.2016 20:48 # −5
поэтому для особо грамотных специально придумали symbol такой - 8, дак и то тупняк на говнокоде
Propovednik_01 08.02.2016 22:57 # +1
~Ваш кэп~
minixoid 08.02.2016 15:10 # −7
>> А вот тут уже может быть только 8 бит.
да вы гоните. не может такого быть, чтобы в переменной типа uint8_t было 8 бит, это же бред полный. все комментаторы уже давно осознали, что их там может быть сколько угодно, например, 5. или 7. или 11. или вы всё ещё тупите?
minixoid 08.02.2016 18:12 # −8
чойта я мальца обшибся в ацэнке шыроты контингента... аказываеццо, тутоньки не только "программисты" и "юмористы", а ишшо и "лингвисты"... прям не знаю, куда девацца
ну, написал бы я "sumtyme byte can bloat upto 123 bits"...
к какой букофке ты бы прикопался?
minixoid 08.02.2016 20:29 # −7
и столько лишних нажатий на клавиатуру.
я представляю, какой бы srach случился, если б я написал
megabyte, или, боже упаси, мибибайт.
тут, блин, с uint8_t, как выяснилось, "проблемы"... зайобибайтим енто дело, любители "стандартов"?..
guest 09.02.2016 10:09 # +5