帮小弟我解读下这个程序
帮我解读下这个程序
#include <stdio.h>
#include <limits.h>
int main(void)
{
int a,i=0;
unsigned int mark=1<<CHAR_BIT*sizeof(int)-1;
scanf("%d",&a); /*输入要查看二进制形式的整数*/
while (mark) {
putchar(a&mark?'1':'0');
if (++i%4==0)
putchar(' ');
mark>>=1;
}
putchar('\n');
return 0;
}
------解决方案--------------------
------解决方案--------------------
#include <stdio.h>
#include <limits.h>
int main(void)
{
int a,i=0;
unsigned int mark=1<<CHAR_BIT*sizeof(int)-1;
scanf("%d",&a); /*输入要查看二进制形式的整数*/
while (mark) {
putchar(a&mark?'1':'0');
if (++i%4==0)
putchar(' ');
mark>>=1;
}
putchar('\n');
return 0;
}
------解决方案--------------------
#include <stdio.h>
#include <limits.h>
int main(void)
{
int a,i=0;
unsigned int mark=1<<CHAR_BIT*sizeof(int)-1; //最高位为1,其余位为0。。
scanf("%d",&a); /*输入要查看二进制形式的整数*/
while (mark) {
putchar(a&mark?'1':'0'); //mark永远只有一位为1,如果a对应的那位也为1,则a&mark大于0。。
if (++i%4==0)//每4位输出一个空格。。
putchar(' ');
mark>>=1; //mark右移一位,也就是为1那个位右移了一位。。
}
putchar('\n');
return 0;
}
------解决方案--------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
int main() {
int i,v;
char bs[33];
char b[33];
char hs[9];
char h[9];
char s[4];
char *e;
// 十进制整数转二进制串;
i=1024;
ltoa(i,b,2);
sprintf(bs,"%032s",b);
printf("i=%d,bs=%s\n",i,bs);
// 十进制整数转十六进制串;
i=1024;
ltoa(i,h,16);
sprintf(hs,"%08s",h);
printf("i=%d,hs=%s\n",i,hs);
// 十六进制字符串转成十进制数
strcpy(hs,"00000400");
sscanf(hs,"%x",&i);
printf("hs=%s,i=%d\n",hs,i);
// 二进制字符串转化为十六进制字符串;
strcpy(bs,"00000000000000000000010000000000");
i=strtol(bs,&e,2);
ltoa(i,h,16);
sprintf(hs,"%08s",h);
printf("bs=%s,hs=%s\n",bs,hs);
// 二进制字符串转化为十进制数;
strcpy(bs,"00000000000000000000010000000000");
i=strtol(bs,&e,2);
printf("bs=%s,i=%d\n",bs,i);
// 十六进制字符串转成二进制串
strcpy(hs,"00000400");
sscanf(hs,"%x",&i);
ltoa(i,b,2);
sprintf(bs,"%032s",b);
printf("hs=%s,bs=%s\n",hs,bs);
// ASC\GBK字符串转十六进制串
strcpy(s,"a汉");
i=0;