亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

a為5,為什么取反后c的值不是2呢?

a的二進制是101,那么取反應該是010,十進制為2,為什么c輸出的值為-6呢?

https://img1.sycdn.imooc.com/66f3f8f00001b5e809480631.jpg

正在回答

1 回答

核心問題解答

在C++中,整數(如int類型)通常使用補碼表示法來存儲負數。對于正數5,其二進制表示為00000101(假設這是一個8位的整數)。當你對這個數取反(即按位取反),得到的是11111010。

但是,由于計算機使用補碼表示法,這個結果實際上代表的是-6。這是因為:

  1. 首先,找到6的補碼表示。6的二進制表示為00000110
  2. 然后,將6的二進制表示取反,得到11111001。
  3. 最后,將取反的結果加1,得到11111010。

因此,11111010在補碼表示法中代表的是-6,而不是2。

修復后的代碼

在這個例子中,代碼本身沒有錯誤,因為它正確地展示了取反操作的結果。如果你希望看到取反后的二進制表示,可以修改代碼如下:

#include?<stdio.h>
#include?<bitset>

int?main(int?argc,?char?**argv)
{
????int?a?=?5;
????int?c;
????printf("a的值為:%d\n",?a);
????c?=?~a;
????printf("c的值為:%d\n",?c);
????std::bitset<8>?binary_c(c);
????printf("c的二進制表示為:%s\n",?binary_c.to_string().c_str());
????return?0;
}

這段代碼會輸出c的二進制表示,幫助你更好地理解取反操作的結果。

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

a為5,為什么取反后c的值不是2呢?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號