3

I have been performing bitwise operation on a variable.

int p=3,q=5;
int a=~p,b=~q; //complement a and b
printf("%d %d\t%d %d",p,a,q,b);

The theoretical output for 'b' is 10 and in case if it's signed, it has to be -2. But the output is -6.

Can someone explain me the working of it?

4

3 に答える 3

7

~は、基本的にを計算するc(またはpython)のビット単位の補数演算子-x - 1です。

したがって、テーブルは次のようになります。

0  -1
1  -2
2  -3
3  -4 
4  -5 
5  -6

2の補数表現では、数値xの最上位ビットが1の場合、実際の値は-(〜x + 1)になります。

例えば、

0b11110000 = -(~0b1111 + 1) = -(15 + 1) = -16.

これは負の数の自然な表現です。

0000001 =  1
0000000 =  0
1111111 = -1  (wrap around)
1111110 = -2
1111101 = -3 etc.

詳細については、 http://en.wikipedia.org/wiki/Two%27s_complementを参照してください。

于 2012-11-07T08:37:27.243 に答える
3

pは0b11であるため、a(16ビット整数を想定)0b1111111111111100 = 0xFFFC(符号なしの場合)および-3(符号付きの場合)になります。

qは0b101であるため、b(16ビット整数を想定)0b1111111111111010 = 0xFFFA(符号なしの場合)および-6(符号付きの場合)になります。

于 2012-11-07T08:36:37.567 に答える
1

p(ie 5)の補数を取る場合、1010、つまり10になると予想されます。しかし、実際には、補数演算中にすべてのビットが反転されます。

このプログラムを検討してください。

#include <stdio.h>

int main()
{

int p=5,q=3;
int a=~p,b=~q; //complement a and b
printf("%x %x\t%x %x",p,a,q,b);

return 0;
}

プリント

5 fffffffa  3 fffffffc

したがって、%dを使用して印刷する場合、符号が考慮されます。

于 2012-11-07T08:41:13.967 に答える