符号付き整数とは何ですか?


ベストアンサー

これはソフトウェアエンジニアリングのトピックで尋ねられるので、おそらく表現について話し合うことができます。

8つデータのビット(ビットは1または0を表すスイッチ)は、次のように符号なし整数を保持できます。

0 = 00000000

1 = 00000001

2 = 00000010

4 = 00000100

8 = 00001000

16 = 00010000

256 = 10000000

511 = 11111111

したがって、8ビットのデータは255までの符号なし整数を保持できます。 0程度の小ささです。ただし、実際のアプリケーションでは、正の数だけでなく負の数も必要になる場合があります。

符号付き整数に対応するには、ストレージの一部を放棄する必要があります。これを行うスキームはいくつかあります。

最も単純なスキームは、最初のビットを使用して符号を表すことです(たとえば、ゼロが正で1が負です)。これには、正と負のゼロ値を持つという面白い結果があります。

+ 0 = 00000000

- 0 = 10000000

1 = 00000001

- 1 = 10000001

+ 2 = 00000010

- 2 = 10000010

+ 64 = 01000000

- 64 = 11000000

+127 = 01111111

これにより、 -127から+127、つまり255の数値(0を含む)。

これを行う別の方法は、 1の補数と呼ばれるものを使用することです。ストレージ。この場合、負の数は正の数と反対のビットシーケンスです。

例:

0 = 00000000

0 = 11111111

2 = 00000010

- 2 = 11111101

負の数の算術演算では、2つの数を加算できます。たとえば、2 + -2は

+ 2 = 00000010

-2 = 11111101

<になります。 p> --------------

= 11111111

以前に見たものはゼロでした。したがって、この表現に8ビットで格納できる範囲は、-127〜 + 127の整数、つまり255の数値です(単一の数値としてゼロを含めるため)。

ゼロの負の数はゼロであるため、ゼロの表現はまだ2つあります。これは少し無駄なので、これを回避するために、 twos-complement が使用されます。これは、1の補数の負の数を取り、1を加算します。この表現では

0 = 00000000

2 = 00000010

- 2 = 11111110

- 1 = 11111111

1 = 00000001

-128 = 10000000

127 = 01111111

-127 = 10000001

したがって、この表現に8ビットで格納できる範囲は、-128〜 + 127の整数、または合計256の数値です。このスキームを使用すると、すべての組み合わせをより効果的に使用できます。これは、符号付き整数などの基本的なものを表すリソースを最大限に活用する場合に非常に重要です。

他にも符号付きの形式があります。 符号付き数値表現-ウィキペディアで確認できる整数表現。

回答

まず、どちらの解決策もありません。数値がゼロに等しい。

両方がゼロの場合、両側は未定義です。 (必要に応じて、その解決策と呼ぶことができます-私はしません。)

一方がゼロでもう一方が正の場合、一方はゼロでもう一方は1です。

一方がゼロでもう一方が負の場合、一方は一方で、もう一方は未定義です。

正の整数のみを考慮すると、a = bが機能することは明らかです。

他の解決策については、両側の自然対数を取り(両側が正であるため、問題ありません)、次のようになります。

b ln(a)== a ln(b)

両側をaとln(a)で除算します(問題ありません。現時点では正の整数のみを考慮しています)。

(b / a)== ln(b)/ ln( a)== ln(a *(b / a))/ ln(a)== [ln(a)+ ln(b / a)] / ln(a)== 1 + ln(b / a)/ ln(a)

再配置

(b / a)-1 == ln(b / a)/ ln(a)

両側を乗算しますln(a)で両側を(b / a)-1で除算して、

ln(a)== ln(b / a)[(b / a)-1]

a = bの場合、これはゼロによる除算ですが、すでにその場合を考慮していることに注意してください。したがって、これはa> 0、b> 0、およびa bに対してのみ有効です。ここでb / aaに名前を付け、x = b / aと呼びます。

つまり、

ln(a)== ln(x)/(x-1)

a == 1でない限り、左側は常に正であることに注意してください。この場合、x == 1が必要です(右側は、x = 1をカバーする連続性によって定義でき、次のようになります。この時点で1に等しい)。しかし、x == 1の場合、a = bであるため、この方程式の導出は無効であり、とにかくa = bをすでに検討しました。

したがって、左側はa> 1に対して正です。しかし、それは問題ありません。なぜなら、右側は常に正のxに対して正だからです。しかし、ln(a)<1とln(a)> 1の場合を別々に考えることができます。 (aの整数値に対してln(a)= 1は発生しません。)

ln(a)の場合、

ln(x)/(x-1 )。

x> 1の場合、分子と分母は正であるため、

ln(x)-1となります。これは常に当てはまります。ただし、x の場合、分子と分母は負であるため、

ln(x)> x-1

これは対数関数には当てはまりません。したがって、ln(a)<1の場合、x> 1が必要です。 (すでにa = bについて説明しているので、x = 1を考慮する必要はありません。)

ln(a)> 1の場合はどうなりますか?次に

ln(x)/(x-1)> 1

x> 1の場合、分子と分母は正であるため、

ln( x)> x-1

これは決して当てはまりません。 x の場合、分子と分母は負であるため、

ln(x)-1

これは常に当てはまります。したがって、ln(a)> 1の場合、x が必要です。

したがって、a bの正の整数の場合、考慮すべき2つのケースがあります。 1つは

ln(a)<1およびx> 1

であり、もう1つは

ln(a)> 1およびx

では、これについて考えてみましょう。 ln(a)<1となるようなa> 1(すでにa = 1と見なしている)は1つだけであり、それはa = 2です。次に、対応するxは次の式で与えられます。

ln(2)== ln(x)/(x-1)

知識に基づいた推測(および他の回答の1つにはすでにこれがあります)解)はx = 2です。ただし、x = b / a、およびa = 2であるため、x = 2の場合、a = 4です。 ln(x)/(x-1)はx> 0の厳密に減少する関数であるため、xの他の値の解はあり得ないことに注意してください。

他の場合はln(a)です。 > 1ですが、この場合、x になります。つまり、b / a 、またはb 1(任意の整数a> 2に当てはまります)の場合、aは大きい整数であり、bは小さい整数です。しかし、ln(b)> 1は可能ですか?もしそうなら、aとbを切り替えるだけで、これも対称性のために解決策になるはずです。次に、ln(a)> 1、つまりx <1は、aがまだ大きい整数であり、bが小さいことを意味します。つまり、aは大きく、bは小さく、値を切り替えます。aはさらに大きく、bはさらに小さくなりますか?ありえない。したがって、ln(a)> 1およびln(b)> 1のソリューションはありません。 ln(b)= 1は整数に対応しないため、ln(a)> 1の場合、ln(b)でなければなりません。また、ln(b)<1の整数b> 1は2のみです。

したがって、正の整数解がある場合、2つの値aとbは同じであるか、一方が2です。もう1つは4です。

a = b = 0を解と呼びたくない限り、a = 0またはb = 0を含む解はありません。これは、undefinedがundefinedに等しいという理由からですが、数学の免許を奪われたくありません。

否定的な解決策がありますか。 a <0およびb> 0(b = 0にすることはできないことがわかっています)とすると、a ^ bは整数ですが、a = -1の場合はb ^ aは整数にすぎません。ただし、bが奇数の場合はa ^ bは-1であり、bが偶数の場合は+1です。 b ^ aは正であるため、a = -1と奇数bを持つことはできません。ただし、bが偶数の場合、a ^ bは1であり、b ^ aは1に等しくありません。したがって、a <0およびb> 0を持つことはできません。同じ理由で、a> 0とb を持つことはできません。

a とb を持つことはできますか?その場合、a ^ bは、bが偶数の場合は正であり、bが奇数の場合は負です。同様に、b ^ aは、aが偶数の場合は正であり、aが奇数の場合は負です。したがって、2つが等しくなるためには、aとbの両方が奇数であるか、aとbの両方が偶数である必要があります。

それらが奇数であるとします。次に、

a ^ b == b ^ a

両側に負の値を掛けて少し並べ替えると、

(-a) ^ b ==(-b)^ a

両側の逆数を取ると、

(-a)^(-b)==(-b)^(- a)

ただし、a およびb <0の場合、-a> 0および-b> 0であり、-aおよび-bの両方が奇数である唯一の正の解は、 -a = -b、またはa = bの場合。したがって、aとbがそれぞれ同じ負の奇数の整数である場合、等式が成り立ちます。どちらかが負の奇数の整数であるがa bの場合、それは解ではありません。

aとbが負の偶数の整数である場合はどうなりますか?次に、両側に-1を掛けずに、

(-a)^ b ==(-b)^ a

を取得します。両側の逆数を取ると、次のようになります。

(-a)^(-b)==(-b)^(-a)

-aの解はすでにわかっています。 > 0および-b> 0であり、どちらも正の整数です。 -a = -b、または-a = 2と-b = 4、または-a = 4と-b = 2のいずれか。

これはすべての場合をカバーします。したがって、整数解の完全なリストは次のとおりです。

aとbは同じ正または負の整数です(ただしゼロではありません)

a = 2およびb = 4

a = 4およびb = 2

a = -2およびb = -4

a = -4およびb = -2

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です