
Yura
22.07.2018
21:40:32
Нет
Урезание это удаление всех битов старше 32го
В чем смысл этой операции мне пока непонятно

Sviat
22.07.2018
21:42:19
Ок
Просто - 2 ** 32 даёт тот же результат что и << 0

Yura
22.07.2018
21:46:22
А откуда ты эту операцию взял?

Google

Sviat
22.07.2018
21:46:32
Конкретно
<< 0?

Yura
22.07.2018
21:46:42
-2^32

Sviat
22.07.2018
21:46:54
-2^32
Подсказали питонщики

Yura
22.07.2018
21:47:49
А если увеличить число в 10 раз результат тоже будет совпадать
?

Sviat
22.07.2018
21:48:04
Надо тестировать
Я не уверен что это 100% верное решение
Как минимум если число будет 0, то его сделают -4млрд
Короче, вот то число на скрине - красный цвет
Там где большое число, это выхлоп из сдвига argb
Нужно перевести это число, в то, что js возвращает при << 0, но на питоне
Потому что корректное значение для красного цвета -65536
В данном случае сработало простое вычитание... Но как бы это сделать правильно...
Как вариант, перевести в строку битов и обрезать её до длины 32. Но я не уверен что это правильно

Oleg
22.07.2018
21:53:18

Google

Yura
22.07.2018
21:55:11
ану кинь скрин где это в спеке

Sviat
22.07.2018
21:55:37
Почти
if i > 2 ** 31:
i -= 2 ** 32

Роман
22.07.2018
21:56:43
Какой смысл в сдвигах? Компилятор сам оптимизирует эти операции, лучше использовать очевидные команды. Нужно возвести в степень - возводи, не нужно использовать сдвиги.

Yura
22.07.2018
21:56:52
блять

Sviat
22.07.2018
21:57:21

Yura
22.07.2018
21:57:31
как же спека?

Sviat
22.07.2018
21:58:27
Нахер math pow когда 2 ** 32 работает?

Oleg
22.07.2018
21:58:42
и? я не понимаю что ты от меня хочешь. я и говорю, что это не просто вычитание 2**32

Yura
22.07.2018
21:58:56

Sviat
22.07.2018
22:00:06
Почему ты умножаешь на три

Yura
22.07.2018
22:00:49
Нахер math pow когда 2 ** 32 работает?
короче если ты почитаешь внимательней то там сначала округляют до инт32 а дальше вычитают
для округления до интт32 в пайтоне должны быть отдельные функции

Oleg
22.07.2018
22:01:15

Google

Yura
22.07.2018
22:01:19
а просто совпаение в твоем случае

Sviat
22.07.2018
22:11:13
Теперь верно в любом случае
Кроме случая если число меньше 2 ** 32

Yura
22.07.2018
22:12:46
так это по сути и есть приведение до инт32, когда ты делишь на 2**32
только в пайтоне лучше использовать встроеные методы для приведения типов

Sviat
22.07.2018
22:13:58
Конечно лучше. Знать бы еще как они называются, или хотя бы как это гуглить
int 32 python дает вообще головокружительные ответы

Yura
22.07.2018
22:15:06
а с какого типа ты приводить хочешь?
как тебе данные придут, строкой?

Sviat
22.07.2018
22:16:24
сдвигами
но 4294901760 не валидное значение для цвета.

Yura
22.07.2018
22:18:02
понял
щас придумаем

Sviat
22.07.2018
22:19:05
когда же тг научится ограничивать длину ника...

Yura
22.07.2018
22:26:04
А ты уверен что тебе нужно именно rgba а не rgb?
потому что ргба это не только цвет но и альфа канал, что часто выносять в отдельное свойство от цвета

Sviat
22.07.2018
22:26:12
там если даже альфа не указана, в либе ее специально дописывают
И потом - 65*** корректно распознается, значит все правильно

Google

Yura
22.07.2018
22:27:35
а либа пайтоновская? или джс?
да, распознается, но тот ли это цвет
и задействован ли там альфа канал

Sviat
22.07.2018
22:28:01
тот
255, 0, 0, 255 это красный

Admin
ERROR: S client not available

Sviat
22.07.2018
22:29:56
завтра протестирую

Yura
22.07.2018
22:30:53
я знаю что тебе нужно делать но не знаю как
тебе нужно превратить беззнаковый тип в знаковый

Sviat
22.07.2018
22:31:19
def RGBAToRGBInt(RGBA):
i = int((RGBA[3] << 24) + (RGBA[0] << 16) + (RGBA[1] << 8) + RGBA[2])
if i > 2 ** 31:
i = i - 2 ** 32 * math.ceil(i / 2 ** 32)
return i

Yura
22.07.2018
22:32:06
ну в принципе рабочая схема, в твоем случае подходит

Sviat
22.07.2018
22:34:49
но я пока не уверен что писать в if, ** 32 или **31

Yura
22.07.2018
22:34:59
31
больше 32 в принципе не должно получатся

Sviat
22.07.2018
22:35:22
ок, поверим)

Yura
22.07.2018
22:35:54
ок, поверим)
ну просто максимальное возможное зачение в твоем случае это и будет 2**32

Denis
22.07.2018
22:36:29

Google

Denis
22.07.2018
22:36:35
Ошибку получаю: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
Но как их успеть отправить-то :) если запросы асинхронные

Sviat
22.07.2018
22:37:25
А понял, в инт еще есть 50% отрицательных значений

Роман
22.07.2018
22:39:15
Если ты не завершишь соединение, то с чего "респонсу закрываться"?

Yura
22.07.2018
22:39:53

Sviat
22.07.2018
22:40:41
да, только сейчас дошло что есть знаковое
спасибо народ

Denis
22.07.2018
22:41:10
Точно, блин :) Спасибо!
Я не думал, что res.send() перед этим закроет запрос, думал закроет только res.end() :)
Убрал тестовый send перед этим и сработало.
Если ты не завершишь соединение, то с чего "респонсу закрываться"?
Ты уже отправил заголовки и пытаешься установить их снова.

Роман
22.07.2018
22:41:15
Откуда вы это взяли? Ничто никуда само не преобразуется.
Все числа в JavaScript, как целые так и дробные, имеют тип Number и хранятся в 64-битном формате IEEE-754, также известном как «double precision».

Yura
22.07.2018
22:41:46
мы уже все выяснили, все по спеке

Роман
22.07.2018
22:44:54
Число не может взять и преобразоваться само по себе в знаковое или беззнаковое. Покажи что вы там выяснили. Мне кажется вы просто вычитание делаете.
От того что ты из числа, большего 2^32 вычел 2^32, оно не стало от этого другой разрядности.