2016-12-21 2 views
1

私はこのチュートリアルを次のです:A = 0011 1100(10進数で60)になることができ-61全てのビットが〜演算子で反転している場合:https://www.tutorialspoint.com/cprogramming/c_bitwise_operators.htm https://www.tutorialspoint.com/cprogramming/c_operators.htmビット反転 - どのように答え-61ですか?

私はとして開始されたか混乱しています。

私は~Aが11001100になることを理解しています。私の計算から、この2進数1100 0011は、小数点で195に相当します。しかし、Cプログラミング言語とチュートリアルによれば、基本的な10の答えは-61です。

誰か理解してもらえますか?

この質問をお読みいただきありがとうございます。

+1

195から256 = -61:8ビットタイプ –

+0

上の2の補数我々は問題を再現する代わりにしようとすることができるようにあなたが実行している正確なコードをご提示ください推測する。 – merlin2011

+0

(定義上) '-x =〜x + 1'で'〜x = -x-1'なので驚くべきことではありません。 – harold

答えて

1

符号付き正の値のビットを反転すると、上位ビットも反転します(どの型でも)。

したがって、値を印刷すると、負の値が得られます。

符号なし8ビットタイプでは

、あなたが望む結果を得るでしょう:

#include <stdio.h> 

int main() 
{ 
    int x = 60; 
    printf("%d\n",~x); 
    char y = x; 
    printf("%d\n",~y); 
    unsigned char z = x; 
    printf("%u\n",(unsigned char)~z); 

    return 0; 
} 

結果:あなたが使用している場合、整数& charの

-61 
-61 
195 

は、あなたが-61を得るが、あなたが195を得て、より高いビットが値のためにサインではないために使用されます。

1100 0011は、同じ意味(符号なし)を有するすべてのビットを考慮する場合、195である。署名

1100 0011100 0011=64+2+1=67ある - 2^7=128 = -61

+0

素晴らしいです。しかし、私はこれを手でどうやって得るのか説明できますか?どのように1100 0011が195を意味するように見えるときに-61になるか?それは手でビットを反転させたときと同じように反転したときの符号なしのcharが195になる方法に興味があり、それに基づいて基数10の値を計算します。 :) – user3870315

+0

@ user3870315あなたも手で-61を得て、ちょうどそれらのビットを8ビット符号付き整数として解釈します。 – harold

+0

@haroldのやり方がわかりません。 0_o – user3870315

関連する問題