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

Здесь принимаются все самые невообразимые вопросы... Главное - не стесняйтесь. Поверьте, у нас поначалу вопросы были еще глупее :)
Ответить
Встал на лапы
Сообщения: 87
Зарегистрирован: Ср ноя 23, 2016 09:50:36

Сообщение anten89 »

Первый вопрос по числам в восьмеричной системе счисления

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

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

0b00100000

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

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

Сообщение Slabovik »

По первому вопросу: используйте такую систему, которая вам удобнее. В битовых операциях однозначно удобнее двоичное представление, но если вы привыкнете к восьмеричному или шестнадцатиричному - не будет проблем и с ними. Тут только дело в том, насколько хорошо вы свыкнетесь с ними, чтобы свободно оперировать...
По второму вопросу следует внимательнее читать первоисточники, а именно даташит. 110А указывается как возможность кристалла. Корпус типа TO220 длительно ни с такими токами, ни с таким тепровыделением от кристалла, работать не в состоянии. Такой ток имеет значение только для расчёта импульсных режимов.
Контактная информация:
Реклама
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1663
Зарегистрирован: Вт апр 03, 2012 20:36:41
Откуда: Сочи

Сообщение Enigm »

С настройкой портов и регистров тоже пользую двоичный, так просто наглядно по даташиту настраивать.
Друг Кота
Аватара пользователя
Сообщения: 16735
Зарегистрирован: Пт мар 30, 2012 05:17:29
Откуда: Екатеринбург

Сообщение mickbell »

Я тоже часто пользуюсь двоичной. Не считаю это признаком новичка.
И хрюкотали зелюки,
Как мюмзики в мове.

На каждый РКН
Найдётся VPN.
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

маленько поправлю — буквой х обозначается 16 ричное число. инт8 — обозначение восьмибитного числа (char)
главный недостаток двоичной записи — размер (уж больно портянки длинные получаются :) )
согласен, двоичные числа в отладке удобнее (особенно если разговор идет о регистрах или портах)
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Реклама
YS
Друг Кота
Аватара пользователя
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05

Сообщение YS »

"0x1234" - шестнадцатеричное представление. Восьмеричное - "01234". Да, в Си писать лишние нули перед числом не стоит, так как это признак другой формы записи числа.

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

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

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

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

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

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

...

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

Во всех остальных случаях шестнадцатеричная запись хороша тем, что одна цифра шестнадцатеричной записи четко соответствует четырем битам двоичной (ровно пол-байта), и при этом является стандартной формой записи в Си.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Контактная информация:
Реклама
Встал на лапы
Сообщения: 87
Зарегистрирован: Ср ноя 23, 2016 09:50:36

Сообщение anten89 »

можешь подсказать способ чтоб легко привыкнуть и ориентироваться в такой записи. то есть 0b01100101 - как такое число легко понять в щестандацт записи?
Друг Кота
Аватара пользователя
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ

Сообщение просто КОТ »

0b01100101 -> 0х65

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

Стыкуем, понимаем что 0b01100101 это 0x65
Изображение
И ты врёшь!!! © Vladisman
Изображение
Контактная информация:
YS
Друг Кота
Аватара пользователя
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05

Сообщение 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, как я показывал выше.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1910
Зарегистрирован: Ср июл 15, 2015 19:03:17
Откуда: Могилев

Сообщение Serj66610 »

все одно,любая система в конечном итоге переводится в 0и1....т.е. двоичный код.....так к чему утруждать себя,сжимая "портянки"?
Ом намо Бха га ва-тэ,Васу дэва -йа.
Вымогатель припоя
Сообщения: 595
Зарегистрирован: Ср янв 06, 2010 10:01:46

Сообщение metan »

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

Вернуться в «Теория»