求部分代码讲解
#include<stdio.h>c
int main()
{
const int bits=sizeof(int)*8;
unsigned int mask=1<<bits-1;//问题一:这里移位之后就变成二进制数了吗?
int n;
printf("input an integer:");
scanf("%d",&n);
int i;
for(i=0;i<bits;i++)
{
//printf("%c",n&mask?'1':'0');//问题二:这里n是十进制位啊,与的过程是什么?
//printf("%d",n<0);//问题三:下面的n每次左移一位结果是什么?然后在这里判断之后结果又是什么?例如100,
printf("%c",n<0?'1':'0');
//mask=mask>>1;
n<<=1;
}
printf("\n");
return 0;
}
#include<stdio.h>
int?main()
{
????const?int?bits=sizeof(int)*8;
????unsigned?int?mask=1<<bits-1;??? //问题一:二进制跟十进制只是表现形式不一样而已,没有本质区别
????int?n;
????printf("input?an?integer:");
????scanf("%d",&n);
????int?i;
????for(i=0;i<bits;i++)
????{
????????//printf("%c",n&mask?'1':'0');??????? //问题二:n呈现给你的是十进制,对计算机来说是二进制
????????//printf("%d",n<0);??????????????????? //问题三:相当于乘以2
????????printf("%c",n<0?'1':'0');
?
????????//mask=mask>>1;
????????n<<=1;
????}
????printf("\n");
????return?0;
}
一:计算机只认识二进制,其他的进制只不过是为了方便人脑的记忆或计算。这个表达式有个运算符的优先级问题,相当于 1<<(bits-1)。
二:把n写成二进制形式,再计算与的结果.
比如n=1;mask=2; n&mask=0,二进制表示为:0000,0001 & 0000,0010 = 0000,0000
三:位移运算,比如依上例: n << mask; 二进制表示为:0000,0001 << 2 = 0000,0100(十进制数:4)
楼主可根据以上讨论,在问题一那行下个断点,试着单步跟踪下上面的程序,相信你会让自己很愉悦的。