整数在内存中以二进制补码形式存储。对于给定的整数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);}