Страница 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 писал(а):так к чему утруждать себя,сжимая "портянки"?
А кто вам сказал, что у всех одна цель - сжать портянки? С этим прекрасно справляются архиваторы

Как раз наоборот, часто для капитального улучшения качества кода обязательно эту портянку "разжать". Грамотно, разумеется. Выше в теме всё это разобрано.
И посмотрите сами, люди очень часто просят помочь им разобраться с кодом, написанным в стиле "музыки нулей и единиц". И редкая птица, желающая помочь, долетит до середины такого кода
