Как делает оператор побитового дополнения (~ тильда) работа?

Так как fa-icon является компонентом, он не применяет масштабирование, как с необработанным svg.

Вам нужно получить доступ к дочернему элементу в компоненте fa-icon. Попробуйте получить доступ к дочернему элементу svg - (я помню, что дочерний элемент является элементом svg, но используйте ваши инструменты проверки для точного определения)

&:hover {
    > svg {
      transform: scale(1.1)
      -webkit-transform: scale(1.1)
      -moz-transform: scale(1.1)
      -o-transform: scale(1.1)
    }
}

Помните значение по умолчанию transform: scale(1.1), оно поддерживается большинство современных браузеров.

169
задан Pshemo 19 May 2018 в 08:08
поделиться

5 ответов

Помните, что отрицательные числа сохраняются как дополнение к двум положительного аналога. В качестве примера, вот представление -2 в дополнении к двум: (8 битов)

1111 1110

Способ, которым вы получаете это, беря двоичное представление числа, беря его дополнение (инвертируя все биты) и добавляя один. Два начинается как 0000 0010, и инвертируя биты, мы получаем 1111 1101. При добавлении одного мы получим приведенный выше результат. Первый бит является знаковым битом, означающим отрицательный.

Итак, давайте посмотрим, как мы получим ~ 2 = -3:

Вот еще два:

0000 0010

Просто перевернем все биты, и мы получим:

1111 1101

Хорошо, как выглядит -3 в дополнении к двум ? Начните с положительного значения 3: 0000 0011, переверните все биты до 1111 1100 и добавьте один, чтобы получить отрицательное значение (-3), 1111 1101.

Таким образом, если вы просто инвертируете биты в 2, вы получите представление дополнения до -3.

Оператор дополнения (~) JUST FLIPS BITS. Это зависит от машины, чтобы интерпретировать эти биты.

261
ответ дан 23 November 2019 в 20:51
поделиться

~ переворачивает биты в значении.

Почему ~ 2 равно -3 связано с тем, как числа представляются поразрядно. Числа представлены в виде дополнения до двух .

Итак, 2 - это двоичное значение

00000010

И ~ 2 переворачивает биты, так что теперь значение равно:

11111101

Что, это двоичное представление -3 .

36
ответ дан 23 November 2019 в 20:51
поделиться

As others mentioned ~ just flipped bits (changes one to zero and zero to one) and since two's complement is used you get the result you saw.

One thing to add is why two's complement is used, this is so that the operations on negative numbers will be the same as on positive numbers. Think of -3 as the number to which 3 should be added in order to get zero and you'll see that this number is 1101, remember that binary addition is just like elementary school (decimal) addition only you carry one when you get to two rather than 10.

 1101 +
 0011 // 3
    =
10000
    =
 0000 // lose carry bit because integers have a constant number of bits.

Therefore 1101 is -3, flip the bits you get 0010 which is two.

16
ответ дан 23 November 2019 в 20:51
поделиться

Эта операция является дополнением, а не отрицанием.

Считайте, что ~ 0 = -1, и работайте оттуда.

Алгоритм отрицания - «дополнение, приращение».

Знаете ли вы? Существует также «дополнение», в котором обратные числа симметричны и имеют как 0, так и -0.

8
ответ дан 23 November 2019 в 20:51
поделиться

tl; доктор ~ зеркальные отражения биты. В результате изменения знака. ~2 отрицательное число (0b..101). Производить отрицательное число ruby печать -, затем дополнение two [1 113]: -(~~2 + 1) == -(2 + 1) == 3. Положительные числа производятся, как.

существует внутреннее значение и его строковое представление. Для положительных целых чисел они в основном совпадают:

irb(main):001:0> '%i' % 2
=> "2"
irb(main):002:0> 2
=> 2

последнее существо, эквивалентное:

irb(main):003:0> 2.to_s
"2"

~ зеркальные отражения биты внутреннего значения. 2 0b010. ~2 0b..101. Две точки (..) представляют бесконечное число [1 121]. Так как старший значащий бит (MSB) результата 1, результатом является отрицательное число ((~2).negative? == true). Производить отрицательное число ruby печать -, затем дополнение two внутреннего значения. Дополнение Two вычисляется путем зеркального отражения битов, затем добавления 1. Дополнение Two [1 127] 3. Как таковой:

irb(main):005:0> '%b' % 2
=> "10"
irb(main):006:0> '%b' % ~2
=> "..101"
irb(main):007:0> ~2
=> -3

Для подведения его он зеркально отражает биты, который изменяет знак. Для вывода отрицательного числа, это печатает -, затем ~~2 + 1 (~~2 == 2).

причина, почему ruby выходные отрицательные числа как так, состоит в том, потому что она рассматривает хранимую сумму как дополнение two абсолютного значения. Другими словами, что хранится, 0b..101. Это - отрицательное число, и как таковой, это - дополнение two некоторого значения x. Для нахождения x это делает дополнение two [1 136]. Который является дополнением two дополнения two [1 137]. Который является x (например, ~(~2 + 1) + 1 == 2).

В случае, если Вы подаете заявку ~ к отрицательному числу, оно просто зеркально отражает биты (который, тем не менее, изменяет знак):

irb(main):008:0> '%b' % -3
=> "..101"
irb(main):009:0> '%b' % ~-3
=> "10"
irb(main):010:0> ~-3
=> 2

то, Что более сбивает с толку, - то, что ~0xffffff00 != 0xff (или любое другое значение с MSB равняются [1 142]). Давайте упростим его немного: ~0xf0 != 0x0f. Поэтому это рассматривает 0xf0 как положительное число. Который на самом деле имеет смысл. Так, ~0xf0 == 0x..f0f. Результатом является отрицательное число. Дополнение Two [1 146] 0xf1. Так:

irb(main):011:0> '%x' % ~0xf0
=> "..f0f"
irb(main):012:0> (~0xf0).to_s(16)
=> "-f1"

В случае, если Вы не собираетесь применять побитовые операторы к результату, можно рассмотреть ~ как -x - 1 оператор:

irb(main):018:0> -2 - 1
=> -3
irb(main):019:0> --3 - 1
=> 2

, Но это возможно имеет не много применения.

пример Скажем, Вам дают 8-разрядное (для простоты) сетевую маску, и Вы хотите вычислить количество [1 150]. Можно вычислить их путем зеркального отражения битов и вызова bit_length (0x0f.bit_length == 4). Но ~0xf0 == 0x..f0f, таким образом, мы должны отключить ненужные биты:

irb(main):014:0> '%x' % (~0xf0 & 0xff)
=> "f"
irb(main):015:0> (~0xf0 & 0xff).bit_length
=> 4

Или можно использовать оператор XOR (^):

irb(main):016:0> i = 0xf0
irb(main):017:0> '%x' % i ^ ((1 << i.bit_length) - 1)
=> "f"
1
ответ дан 23 November 2019 в 20:51
поделиться
Другие вопросы по тегам:

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