У Javascript, якщо я виконую побітові операції НЕ на десятковий знак ціле число 10:
~10
Я очікую, що він обчислить побіжно НЕ на бінарний ціле число наступним чином:
~1010 = 0101
Іншими словами, я очікував десяткового цілого числа 5. Натомість операція дає мені -11. (спробуйте в консолі)
~10 = -11
Якщо я перевіряю це більш чітко, дивлячись на -11 та ~ 10 як бінарні цілі рядки:
parseInt(~10,10).toString(2)
"-1011"
parseInt(-11,10).toString(2)
"-1011"
Послідовний. Але я не розумію. Чи хтось може мені пояснити, чому? Я здогадуюсь, що це щось пов'язане зі знаком.
EDIT: Я знайшов це питання після публікації це також допомогло мені зрозуміти це явище набагато краще.
Відповіді:
4 для відповіді № 1Побітові оператори в Javascript трактують число як 32 біти. Так 10 є
00000000 00000000 00000000 00001010
Коли ви його інвертуєте, результат:
11111111 11111111 11111111 11110101
Коли трактується як 32-розрядний підписаний номер, це "s -11 (якщо ви не розумієте чому, читайте запис у Вікіпедії на Два доповнення)