mainint a 3 a a printfd n ,a這不是取反運算嗎?為什麼a輸出是2呢

2022-03-09 08:05:31 字數 2855 閱讀 9517

1樓:匿名使用者

這個得理解-3是怎麼在計算機中儲存的。

負數的補碼=對應正數補碼取反+1

-3對應的正數是3,3在計算機中的儲存是0011,取反就是1100,再加1得到3的補碼,也就是1101

然後程式執行這句話a=~a;

所以a現在就是0010,列印出來就是2了

2樓:匿名使用者

取反的意思,把十進位制數轉成二進位制數,然後按位取反,然後輸出十進位制。

原碼:1000 0000 0000 0011 -3;

補碼:1111 1111 1111 1101 -3;

取反:0000 0000 0000 0010 2;

計算機裡存負數是用補碼錶示的,取反是反補碼取返,如上所示,補碼取反,連符號位一起變反,成了2;

3樓:天涯幻風

計算機的cpu是隻認二進位制的,所以計算機位操作也是要現轉化為二進位制的,具體轉化如下:

-3的原碼:10000011 然後轉化為補碼:11111101 再按位取反為:00000010即為2的二進位制**,再按十進位制輸出時自然就是2了!

main() { int a=-3; a=~a; printf("%d\n",a); } 這不是一個取反運算嗎?為什麼a輸入是2呢?

4樓:匿名使用者

在計算機中儲存a=-3,是儲存3的補碼,即0000 0011取反加1,即1111 1101(舉8位為例,現在計算機中儲存int型別是32位),所以對a進行取反操作得到的a的結果為0000 0010,即a=2.

5樓:匿名使用者

求反運算子~為單目運算子,具有右結合性。其功能是對參與運算的數的各二進位按位求反。

例如~9的運算為:

~(0000000000001001)結果為:1111111111110110

解釋:int為2位元組(16位二進位制),在計算機中負數的儲存方式是其補碼,而-3的補碼為11 11 11 11 11 11 11 01,按位取反為,00 00 00 00 00 00 00 10,就是2了

補碼:正數的補碼就是原碼,負數的補碼為,負數的絕對值取反加1,-3的補碼為:-3的絕對值3,二進位制為00 00 00 00 00 00 00 11 ,取反為11 11 11 11 11 11 11 00,加1為11 11 11 11 11 11 11 01,這個就是-3在計算機中儲存的二進位制了

6樓:

~在c中是按位取反運算子。負數在計算機中表示為補碼。如果整形是2個自己表示,-3的補碼是00000011-〉11111101,對11111101取反等於00000010,所以輸出2。

c語言 main() { int a=9; a+=a-=a+a; printf(「%d\n」,a); }得多少?為什麼?

7樓:超絕至精

1、c語言 main() 最後結果就是-18;

2、賦值語句,從右到左依次執行:那麼:int a=9;a+=a-=a+a;

3、相當於:a-=a+a;a+=a;然後相當於:a=a-(a+a);a=a+a;

4、由於a初始化為9:a=a-(a+a)=-a=-9;a=a+a=-9+(-9)==-18;所以最後結果就是-18。

5、a+=(a-=a+a) 首先計算a-=a+a,因為賦值運算子的優先順序小於算術運算子故先算a+a;

6、 得出a-=18;此刻a的值還是9,計算a-=18得出a=-9;

7、a+=-9,計算得出a=a+(-9) a=(-9)+(-9) 所以最後a=-18。

8樓:

賦值語句,從右到左依次執行:

那麼:int a=9;

a+=a-=a+a;

相當於:

a-=a+a;

a+=a;

然後相當於:

a=a-(a+a);

a=a+a;

由於a初始化為9:

a=a-(a+a)=-a=-9;

a=a+a=-9+(-9)==-18;

所以最後結果就是-18

9樓:匿名使用者

a+=(a-=a+a) 首先計算a-=a+a,因為賦值運算子的優先順序小於算術運算子故先算a+a 得出a-=18;此刻a的值還是9,計算a-=18得出a=-9;a+=-9,計算得出a=a+(-9) a=(-9)+(-9) 所以最後a=-18.

10樓:匿名使用者

第一步:a + a = 18;

第二步:a - = 18---> a = a - 18,此時a = 9 ,計算結果: -9;

第三步:a += -9 --> a = a+ (-9),因a= - 9,故結果: -18。

最後結果:-18.

有一例題如下求執行結果。

11樓:撿到的幸福

這裡說是不對的。

要看什麼機器什麼的編譯器才能得出結果。

的確a=65535 十六進位制是0xffff但如果unsigned int 型別是4位元組的,你列印出來的依然是a=65535

如果unsigned int 型別是2位元組的,這時就是-1了因為計算機採取的是補碼來儲存資料的

a=65535 二進位制就是1111 1111 1111 1111,這是補碼,第一位是符號位,等於1時就表示是負數。

111 1111 1111 1111 減1再取反就是000 0000 0000 0001 這就是十進位制的1了

再加上負號就是-1了

mainint a1,2,,3,4,5,6,7,8,9,0p p a printfx n ,pprintfx n ,p 9 的執行情況

printf x n p p指向a 0 其值為地bai址值,這個值du由作業系統管zhi理,人不能確dao定。printf x n p 9 p 9的值 應該比p的值大專36,因為,在32編譯系屬統中,整型佔四個字個。第9個整型元素應該在第0個元素後面4 9 36位元組。我的結果是 每個電腦的結果有可...

以下程式的執行結果是mainint a 31,2,3int num 3intp,i for i 0 i3 inum

應該是輸出1。程式是這樣的,先定義 了一個陣列a,並賦值。然後定義了一個指標陣列sum。在for迴圈中,使用了 num i a i 語句,也就是,指標陣列的每個元素分別指向了陣列a的每個元素。前面定義的p,是指向指標的指標,也就是p指向了一個地址,而這個地址又執行了另外一個地址。執行p num後,p...

以下程式的輸出結果是mainint a 21,b 11 printfd na bb a求解,萬分感謝

輸出結果 30 原理 1.c語言的執行順序大多都是自右向左 但是少數c語言編譯軟體內的輸出結容果為31,它的執行順序是自左向右,這裡以vc 6.0為例說明輸出30的原因 2.先執行 b a,根據運算順序知道相當於 b a,b先自減,即b 10,此表示式 b a的值為31.3.然後執行 a b,相當於...