課程
/后端開發
/C++
/趣味 C++ 進階
a的二進制是101,那么取反應該是010,十進制為2,為什么c輸出的值為-6呢?
2024-09-25
源自:趣味 C++ 進階 2-3
正在回答
在C++中,整數(如int類型)通常使用補碼表示法來存儲負數。對于正數5,其二進制表示為00000101(假設這是一個8位的整數)。當你對這個數取反(即按位取反),得到的是11111010。
int
00000101
11111010
但是,由于計算機使用補碼表示法,這個結果實際上代表的是-6。這是因為:
00000110
11111001
因此,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的二進制表示,幫助你更好地理解取反操作的結果。
c
舉報
本課程是 C++ 的進階課程,繼續趣味學習之旅,帶你探索 C++ 的高級用法。
3 回答C++類成員函數的默認值
2 回答最后結果不是應該23嗎為什么答案是21 屬實沒想明白
1 回答為什么要強制轉化成char*而不是int*
1 回答老師最后限制函數返回值什么的講的云里霧里的
1 回答為什么一定要把指針定義為父類不直接定義為子類?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2024-11-05
核心問題解答
在C++中,整數(如
int
類型)通常使用補碼表示法來存儲負數。對于正數5,其二進制表示為00000101
(假設這是一個8位的整數)。當你對這個數取反(即按位取反),得到的是11111010
。但是,由于計算機使用補碼表示法,這個結果實際上代表的是-6。這是因為:
00000110
。11111001
。11111010
。因此,
11111010
在補碼表示法中代表的是-6,而不是2。修復后的代碼
在這個例子中,代碼本身沒有錯誤,因為它正確地展示了取反操作的結果。如果你希望看到取反后的二進制表示,可以修改代碼如下:
這段代碼會輸出
c
的二進制表示,幫助你更好地理解取反操作的結果。