Кодирование порядка байтов JavaScript?

Вы можете использовать UIKeyCommand. Я тестировал на своем 10,5 "iPad Pro под управлением iOS 12.1.1, используя клавиатуру Bluetooth и приложение Swift Playgrounds версии 2.2.

Вот код игровой площадки:

import UIKit
import PlaygroundSupport

class ViewController: UIViewController {
    override func loadView() {
        let command = UIKeyCommand(input: "\u{8}", modifierFlags: .command, action: #selector(ViewController.handleKeyCommand), discoverabilityTitle: "Hello")
        addKeyCommand(command)

        let view = UIView(frame: CGRect(x: 0, y: 0, width: 300, height: 300))
        view.contentMode = .topLeft
        view.backgroundColor = .white

        let stack = UIStackView()
        stack.axis = .vertical
        stack.spacing = 8
        stack.alignment = .fill
        stack.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(stack)
        NSLayoutConstraint.activate([
            view.leadingAnchor.constraint(equalTo: stack.leadingAnchor),
            view.trailingAnchor.constraint(equalTo: stack.trailingAnchor),
            view.topAnchor.constraint(equalTo: stack.topAnchor)])

        let textField = UITextField(frame: CGRect(x: 20, y: 20, width: 260, height: 30))
        textField.borderStyle = .roundedRect
        textField.translatesAutoresizingMaskIntoConstraints = false
        stack.addArrangedSubview(textField)

        label.translatesAutoresizingMaskIntoConstraints = false
        stack.addArrangedSubview(label)

        self.view = view
    }

    @objc func handleKeyCommand(_ sender: UIKeyCommand) {
        commandCount += 1
        label.text = "\(commandCount)"
    }

    private var commandCount = 0
    private let label = UILabel()
}

let vc = ViewController()
PlaygroundPage.current.liveView = vc

Нажмите на текст нажмите ⌘⌫ . Каждый раз, когда вы нажимаете его, счетчик в метке увеличивается на 1.

11
задан hippietrail 26 November 2017 в 13:51
поделиться

5 ответов

Да, они безопасны. Хотя Вы не извлекаете пользу скорости, Вы могли бы надеяться на то, так как битовые операции JS являются "взломом".

6
ответ дан 3 December 2019 в 00:50
поделиться

JavaScript не имеет целого типа, только типа с плавающей точкой. Вы никогда не можете быть рядом достаточно с деталями реализации для волнения об этом.

0
ответ дан 3 December 2019 в 00:50
поделиться

находятся "безопасны" поразрядные сдвиги на целых числах в JavaScript?

Только для целых чисел, которые соответствуют в 32 битах (31+sign). В отличие от, скажем, Python, Вы не можете добраться 1 <<40.

Это - то, как побитовые операторы определяются для работы ECMA-262, даже при том, что Числа JavaScript являются на самом деле плаваниями. (Технически, плавания двойной точности, давая Вам 52 бита мантиссы, достаточно легко для покрытия диапазона 32-разрядного интервала)

Нет никакой проблемы 'порядка байтов', вовлеченного в поразрядную арифметику, и никакой формат устройства хранения данных байта, где порядок байтов мог быть включен, не встроен в JavaScript.

3
ответ дан 3 December 2019 в 00:50
поделиться

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

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

4
ответ дан 3 December 2019 в 00:50
поделиться

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

Порядок байтов только играет роль, когда у Вас есть опция интерпретации некоторого блока памяти как байты или как большие целочисленные значения. В целом JavaScript не дает Вам, что опция, так как Вы не получаете доступ к произвольным блокам памяти, особенно не блоки памяти, занятой переменными. Типизированные массивы открывают вид данных чувствительным к порядку байтов способом, но упорядочивание зависит от хост-системы; это - не обязательно то же для всех возможных серверных сред JavaScript.

Endianness описывает физический порядок устройства хранения данных, не логический порядок устройства хранения данных. Логически, самый правый бит всегда является младшим значащим битом. Является ли байт того бита тем, который находится в самом низком адресе памяти, абсолютно отдельный вопрос, и только имеет значение, когда Ваш язык выставляет такое понятие как "самый низкий адрес памяти", который не делает JavaScript. Типизированные массивы делают, но затем только в контексте типизированных массивов; они все еще не предлагают доступа к устройству хранения данных произвольных данных.

31
ответ дан 3 December 2019 в 00:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: