整數在內存中以二進制補碼形式存儲。對于給定的整數n,要求輸出其4個字節長的補碼。1個字節=8個二進制位。
輸入格式:
輸入一個整數n(?231≤n≤231?1)。
輸出格式:
輸出n的補碼。
輸入樣例1:
123
輸出樣例1:
00000000000000000000000001111011
輸入樣例2:
-123
輸出樣例2:
11111111111111111111111110000101
提示:
- 十進制非負整數n的補碼是n的二進制數,按“除基逆序取余”的方法求得。
例如,123轉換為二進制(基數為2),得到1111011,高位補0得到123的補碼(4個字節長)如下:
00000000000000000000000001111011 - 十進制負整數m的補碼可對?m的二進制數按位取反再加1得到。
例如,對于樣例2,m=?123,?m=123,對應的二進制(123的補碼)如下:00000000000000000000000001111011
按位取反得到:
11111111111111111111111110000100
再加1得到-123的補碼:
11111111111111111111111110000101 -
個人思路:
- 在c語言中數據存儲的形式本來就是補碼可以用右移操作符加上&按位與判斷每一個比特位是1還是0
-
#include <stdio.h> void Print_bin(int n) {for(int i=31;i>=0;i--){if((n>>i)&1==1){printf("1");}else{printf("0");}} }int main() {int n;scanf("%d",&n);Print_bin(n);}