プロが教える店舗&オフィスのセキュリティ対策術

11110100を全ビット反転して1を足すと00001100となるらしいですが、
なぜですか?

やり方も含めて教えてください‼️

教えて!goo グレード

A 回答 (5件)

機械的にやればそうなりますよ。



それと「どうしてそれが元の数の負数表現になるのか」というのは別問題です。

試しに
・元の数:1111 0100[2]

・得られた数:0000 1100[2]
を加えてみれば

 1111 0100[2] + 0000 1100[2]
= 1 0000 0000[2]          ①

になります。
2進数を「8ビット」に限定すれば、①の最上桁(9桁目)は「桁あふれ(オーバーフロー)」して消滅するので、「8ビット2進数」の答としては「0」になります。

(つまり
  1111 0100[2] + 0000 1100[2] = 0000 0000[2]
ということ。計算機の8ビットレジスター上ではこんな計算になる)

つまり「足して結果が 0 になるのは、互いに符号の異なる数(絶対値は等しい)である」ということになるわけです。
(上の例では、最上ビットから「元の数:1111 0100[2]」を負数、「得られた数:0000 1100[2]」を正数とするのがふつうです)
    • good
    • 0

11110100


の全ビット反転は
00001011
00000001を足すと
--------------------筆算すると
00001100
    • good
    • 0

#!/usr/bin/perl



use strict;
use warnings::register;

# ビット列
my $bits = pack('B8', "11110100");
# ビット反転
my $bits_rev = ~$bits;
# いち
my $bits_one = pack('B8', "00000001");

# 整数化
my $bits_rev_int = unpack('C', $bits_rev);
my $bits_one_int = unpack('C', $bits_one);

# 整数化数値の表示
print " ReversedBitsToInt: $bits_rev_int\n";
print "NumericOneBitsToInt: $bits_one_int\n";

# 整数化して計算
my $bits_val_int = $bits_rev_int + $bits_one_int;

# 数式と結果
print " CalculationFormula: $bits_rev_int + $bits_one_int = $bits_val_int\n";

# ビット列化
my $bits_val = unpack('B8', pack('C', $bits_val_int));

# 結果の表示
print " AnswarToBitsValue: $bits_val\n";

__END__
出力

ReversedBitsToInt: 11
NumericOneBitsToInt: 1
CalculationFormula: 11 + 1 = 12
AnswarToBitsValue: 00001100

紙がなくて…、紙がある場合

8桁のビットパターンを紙とペンで10進数に変換する方法
https://www.ipvx.info/ip_cal/bittonum/
    • good
    • 0

11110100を全ビット反転


00001011
+    1
----------
00001100

何でやねん?
2進数11(10進数3)に1を足すと100(10進数4)になるから。

よう知らんけど。
「11110100を全ビット反転して1を足」の回答画像2
    • good
    • 0

全ビット反転→00001011


1を足す→00001100
    • good
    • 2

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

教えて!goo グレード

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング