LINUX.ORG.RU

Перевести с СИ на Python [Решено]

 ,


0

2

Нужна помощь зала (с) в переводе с СИ на Python буквально двух строчек:

r = (oldColor & 0x00ff0000UL) >> 16;
r=(r<=10)? 0 : int(r-(r*fadeValue/256));

Ну или хотя бы на «человеческий» язык, а уж на python соображу.



Последнее исправление: donpadlo (всего исправлений: 1)

Ответ на: комментарий от eternal_sorrow

Нус СИ знаком очень «шапочно», потому конструкция совсем не понятна:

r = (oldColor & 0x00ff0000UL) >> 16;

r равно oldColor и 00ff0000UL переводятся в 16 бит?? В общем результат не понятен. Тоже и со второй строчкой

donpadlo
() автор топика
Ответ на: комментарий от noname_user

Эмм. так может поможете убогому? )) По русски хотяб скажите что написано

donpadlo
() автор топика
Ответ на: комментарий от donpadlo

Ты не с СИ, а в битовых операциях не разбираешься. Они и в питоне есть. И вообще, во всех языках они есть.

anonymous
()

r = (oldColor & 0x00ff0000UL) >> 16;
r=(r<=10)? 0 : int(r-(r*fadeValue/256));

Взять биты с 17 по 24 из oldColor, засунуть их в однобайтовую ячейку r. Если r меньше или равно 10, то вернуть ноль. Иначе произвести вычисление.

byko3y ★★★★
()

А что тебя смущает ? Битовые операции в пистоне такие же. На 2 строчке условие if else

Jopich1
()
Ответ на: комментарий от donpadlo

Тут нечем помогать, понимаешь?

Твой вопрос звучит вот так:

Всем привет, подскажите как перевести следующий код с Си на Питон, а то я в Си не разбираюсь
[code] r = a + b / 2

anonymous
()
Ответ на: комментарий от eternal_sorrow

ну он и не спрашивает готовое решение, справедливости ради. готовое было бы написать ему питон код для этой манипуляции с красным (и, видимо, еще зеленым и синим), который он мог бы просто поставить в свою программу.

anonymous
()
Ответ на: комментарий от anonymous

хотя стоп, именно это он и просит

anonymous
()
Ответ на: комментарий от eternal_sorrow

Задача разовая. Ни к Си ни к Python отношения в повседневной жизни не имею. Смысла тратить пару часов на «разобраться», а потом благополучно забыть? Рациональнее задать вопрос по непонятному моменту у не злобливого гуру СИ.

donpadlo
() автор топика
Ответ на: комментарий от donpadlo

Тут за такие вопросы гоняют ссаными тряпками, потому что, например, предполагается, что чел сначала загуглил «побитовые операции в Python» и аналогично про С, и уже когда не получилось, отправил вопрос на форум.

За практическими вопросами «как сделать» лучше идти на Q/A сайты тира stackoverflow. Вот там по сотому разу разжевывают, как закодировать «здравствуй мир». Я предлагал создать тут на ЛОР раздел, утилитарный Q/A, без флейма вообще, но и с таким предложением тоже был забросан ссаными тряпками.

seiken ★★★★★
()
Последнее исправление: seiken (всего исправлений: 1)

Я тут примером вдохновился. Как правильно написать?

template <typename maybe_Unsigned_T>
bool f(maybe_Unsigned_T l, maybe_Unsigned_T r) {
    SIGNDED_TYPE dif = l - r;
    return dif > 0;
}

Что написать вместо SIGNDED_TYPE? Т.е. это такой тип, который имеет битовую ширину равную ширине maybe_Unsigned_T, его signed противоположность. Можно ли без самопального Type_traits?

pavlick ★★
()
Ответ на: комментарий от donpadlo

Взять значение переменной oldColor и применить побитовую операцию "И" через маску  0x00ff0000UL  (это Hex  представление числа 16711680)  сначала выполнить операцию в скобках короче, затем полученное значение сдвинуть на 16 бит в лево и результат записать в r.

      число    битовая операция "И"     число маска    сдвиг результата
r = (oldColor         &               0x00ff0000UL)    >> 16;


Теперь если r меньше или равно десяти записать в r ноль, иначе r умножить на fadeValue и разделитть на 256 затем из r вычесть то что получилось привести всё к типу int и перезаписать r
r=(r<=10)? 0 : int(r-(r*fadeValue/256));

Тоже самое что и

if(r <= 10)
{
  r =0;
}else{
 r = int(r-(r*fadeValue/256));
}

Но, как домашнее задание сходи и почитай что такое битовый сдвиг >> и что такое операция ‘И’

anonymous
()
Ответ на: комментарий от donpadlo

Остальным «самым умным» лучи поноса..

Зря, тебе плохого ничего не сказали. А твою высказку припомнят в новой твоей теме.

anonymous
()
Ответ на: комментарий от anonymous

Ну достаточно редко что-то спрашиваю, хотя зарегистрирован на ЛОР 11 считай, а читаю дольше. Просто знаю что что-то спросишь/напишешь, выльют поток говна вместо «по делу». Трудно пройти мимо если не знаешь/не хочешь? Конечно трудно! Токсичный контингент стал, особенно в последнее время. Всё писульками норовят помериться. Не всем это нужно..

donpadlo
() автор топика
Ответ на: комментарий от anonymous

Ну не может народ остановиться, хотя еще в 20:37 вчера написал, «Спасибо», т.е. вопрос решен благодаря byko3y.

donpadlo
() автор топика
Последнее исправление: donpadlo (всего исправлений: 1)
r = (oldColor & 0x00ff0000) >> 16
r = 0 if r<=10 else int(r-(r*fadeValue/256))
AntonI ★★★★
()
Последнее исправление: AntonI (всего исправлений: 1)
Ответ на: комментарий от foxy13t

Самое интересное, что сабж переносится на питоняку микроскопическими изменениями, но суть затруднения автора я не понял. Хорошо что тема решена

I-Love-Microsoft ★★★★★
()

короче, чувак, обрати внимание, что в питухоне fadeValue/256 может работать не так как в си. в питоне 2.7 оно ещё нормально работало, а в питухоне 3 оно тебе уже даст число с плавающей запятой, а в си это будет целое число если fadeValue тоже целое.

anonymous
()
Ответ на: комментарий от donpadlo

Класс, сам недели 2 назад спаял себе гирлянду на базе WS2812b-совместимых диодов ^_^

Кстати, существуют ли ленты не из диодов в планарных корпусах, а с сферической линзой, ну круглых таких? Уверен что нет, ибо паять такое нетехнологично, в отличии от ленты, но мало ли?

I-Love-Microsoft ★★★★★
()
r = 0 if oldColor <= 0xa0000 else oldColor - oldColor * fadeValue//256 >> 16
anonymous
()
r = (oldColor & 0x00ff0000UL) >> 16;
r=(oldColor //(2**16))%(2**8)
r=(r<=10)? 0 : int(r-(r*fadeValue/256));
r= 0 if r<=10 else Math.floor(r-(r*fadeValue/256))

+- так

не_факт что math.floor на всех твоих входных тождественна си int

qulinxao3
()
Последнее исправление: qulinxao3 (всего исправлений: 1)
Ответ на: комментарий от wandrien

это ещё более примечательно.

именно сия ассиметрия - вы мне быстренко(выж добрые гуру)(чё мне часы терять - вам секундное дело) - а всякому продолжающему реагировать - указывать ознакомление с уже состоявшейся дискуссией

вот это очень характерное.

qulinxao3
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.