Страница 1 из 1

Вопрос по системе счисления и не только

Добавлено: Пн май 29, 2017 10:40:09
anten89
Первый вопрос по числам в восьмеричной системе счисления

uint8_t step[8] = {0x01, 0x03 ,0x02, 0x06,0x04, 0x0c,0x08,0x09};

я часто вижу что используют именно это представления при программировании пиков в частности. Вот например я хочу включить пятую ножку порта б, я сделаю так (в двоичной системе):

0b00100000

и тут все наглядно (учитывая что отсчет справа налево). По моему так более нагляднее что и где у тебя включено. Но то что используется именно восьмеричное представление у большинства, а двоичное (как я привел выше) используют только новички походу. Так вот в чем вопрос: может я что то не понимаю, может на самом деле восьмеричная выглядит более наглядней или еще что. Обьясните мне преимущества и вообще растолкуйте может я чето недопонимаю.

И второй вопрос — он чуть не по теме, но просто лень ради такой мелочи создавать отдельную тему. Вопрос: вот у нас есть мосфет IRF3205 в корпусе ТО220, если посмотреть даташит то там пишут что он может тянуть ток до 110А. Я как например представлю провода для такого тока то мне представляется кабель толщиной так минимум с палец ребенка и причем не одножильный а «волосатый», а тут корпус ТО220 у которого сечение ножки того же стока или истока отсилы 0,5мм2. Как же тогда он способен пропустить 110А?

Re: Вопрос по системе счисления и не только

Добавлено: Пн май 29, 2017 11:05:50
Slabovik
По первому вопросу: используйте такую систему, которая вам удобнее. В битовых операциях однозначно удобнее двоичное представление, но если вы привыкнете к восьмеричному или шестнадцатиричному - не будет проблем и с ними. Тут только дело в том, насколько хорошо вы свыкнетесь с ними, чтобы свободно оперировать...
По второму вопросу следует внимательнее читать первоисточники, а именно даташит. 110А указывается как возможность кристалла. Корпус типа TO220 длительно ни с такими токами, ни с таким тепровыделением от кристалла, работать не в состоянии. Такой ток имеет значение только для расчёта импульсных режимов.

Re: Вопрос по системе счисления и не только

Добавлено: Пн май 29, 2017 11:12:02
Enigm
С настройкой портов и регистров тоже пользую двоичный, так просто наглядно по даташиту настраивать.

Re: Вопрос по системе счисления и не только

Добавлено: Пн май 29, 2017 12:04:42
mickbell
Я тоже часто пользуюсь двоичной. Не считаю это признаком новичка.

Re: Вопрос по системе счисления и не только

Добавлено: Пн май 29, 2017 12:22:29
Ivanoff-iv
маленько поправлю — буквой х обозначается 16 ричное число. инт8 — обозначение восьмибитного числа (char)
главный недостаток двоичной записи — размер (уж больно портянки длинные получаются :) )
согласен, двоичные числа в отладке удобнее (особенно если разговор идет о регистрах или портах)

Re: Вопрос по системе счисления и не только

Добавлено: Пн май 29, 2017 22:27:53
YS
"0x1234" - шестнадцатеричное представление. Восьмеричное - "01234". Да, в Си писать лишние нули перед числом не стоит, так как это признак другой формы записи числа.

"0b" - во-первых, это нестандартный формат записи, поддерживаемый не всеми компиляторами, а использовать нестандартные расширения без особой нужды - плохой тон, так как это ухудшает понимаемость и портируемость кода.

Во-вторых, запись с использованием двоичного представления действительно очень длинная. Представьте, что нужно записать 32 бита - от такого уже просто будет рябить в глазах.

В-третьих, если нас интересует конкретный бит, гораздо нагляднее записывать число с помощью сдвигов: (1<<1) | (1<<3) | (1<<5). Это тоже очень сильно улучшает восприятие кода.

В-четвертых, если эти биты имеют какое-то особое значение, лучше вообще задать их константами:

Код: Выделить всё

#define FLAG1     (1<<5)
#define FLAG2     (1<<7)

...

if (var & FLAG1)
{
  var2|=FLAG2;
}
Такая запись абстрагирует читающего от нулей и единиц и сразу акцентирует внимание на смысле происходящего. Разумеется, константам-определениям нужно давать осмысленные имена.

Во всех остальных случаях шестнадцатеричная запись хороша тем, что одна цифра шестнадцатеричной записи четко соответствует четырем битам двоичной (ровно пол-байта), и при этом является стандартной формой записи в Си.

Re: Вопрос по системе счисления и не только

Добавлено: Ср май 31, 2017 21:41:58
anten89
можешь подсказать способ чтоб легко привыкнуть и ориентироваться в такой записи. то есть 0b01100101 - как такое число легко понять в щестандацт записи?

Re: Вопрос по системе счисления и не только

Добавлено: Ср май 31, 2017 21:56:50
просто КОТ
0b01100101 -> 0х65

Читаем 6, понимаем что это 0110
Читаем 5, понимаем что это 0101

Стыкуем, понимаем что 0b01100101 это 0x65

Re: Вопрос по системе счисления и не только

Добавлено: Чт июн 01, 2017 10:47:45
YS
можешь подсказать способ чтоб легко привыкнуть и ориентироваться в такой записи.
Способ один - практиковаться. Через некоторое время привыкнете.

А так, каждому знаку шестнадцатеричного представления соответствует пол-байта:

Код: Выделить всё

0    0000
1    0001
2    0010
3    0011
4    0100
5    0101
6    0110
7    0111
8    1000
9    1001
A    1010
B    1011
C    1100
D    1101
E    1110
F    1111
Удобство шестнадцатеричной системы именно в том, что получить бинарное представление можно, просто склеив представления отдельных символов (обратное тоже верно).

0xFE: 0x0F=0b1111, 0x0E=0b1110 -> 0xFE = 0b11111110

0b10011011 -> 0b1001=0x09, 0b1011=0xB -> 0b10011011=0x9B

Вообще же, как я говорил выше, программа должна писаться так, чтобы человеку не приходилось часто переводить значения в уме. Если бит имеет определенное значение, его надо задать константой с помощью #define, как я показывал выше.

Re: Вопрос по системе счисления и не только

Добавлено: Пт июн 02, 2017 23:33:55
Serj66610
все одно,любая система в конечном итоге переводится в 0и1....т.е. двоичный код.....так к чему утруждать себя,сжимая "портянки"?

Re: Вопрос по системе счисления и не только

Добавлено: Вс июн 04, 2017 09:01:47
metan
Serj66610 писал(а):так к чему утруждать себя,сжимая "портянки"?
А кто вам сказал, что у всех одна цель - сжать портянки? С этим прекрасно справляются архиваторы :)
Как раз наоборот, часто для капитального улучшения качества кода обязательно эту портянку "разжать". Грамотно, разумеется. Выше в теме всё это разобрано.
И посмотрите сами, люди очень часто просят помочь им разобраться с кодом, написанным в стиле "музыки нулей и единиц". И редкая птица, желающая помочь, долетит до середины такого кода :)