user-0 提问: 求解：第一句话的含义并且如何实现，怎么判断数据类型

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-0
content: 引用 7 楼 mymtom的回复: /* 输出 */ /*           20 : 00010100           40 : 0000000000101000          100 : 00000000000000000000000001100100         -100 : 11111111111111111111111110011100 */  不是直接输出答案啊用程序算出答案

user: user-2
content: /* 输出 */ /*           20 : 00010100           40 : 0000000000101000          100 : 00000000000000000000000001100100         -100 : 11111111111111111111111110011100 */

user: user-2
content: #include <stdio.h>  char * bits(char type, int value, char *buf) {     unsigned int bit;     unsigned int u;     int len;     int i;      if ('c' == type) {         bit = 0x80;         len = 8;     } else if ('s' == type) {         bit = 0x8000;         len = 16;     } else if ('i' == type) {         bit = 0x80000000;         len = 32;     }      u = (unsigned int)value;     for (i = 0; i < len; i++) {         if (u & bit) {             buf[i] = '1';         } else {             buf[i] = '0';         }         bit >>= 1;     }      buf[len] = '\0';      return buf; }  int main(int argc, char *argv[]) {     char buf[32 + 1];      char  c =  20;     short s =  40;     int   i = 100;     printf("%12d : %s\n", c, bits('c', c, buf));     printf("%12d : %s\n", s, bits('s', s, buf));     printf("%12d : %s\n", i, bits('i', i, buf));     i = -100;     printf("%12d : %s\n", i, bits('i', i, buf));      return 0; }

user: user-3
content: 仅供参考：#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;     while (1) {         if (0==s[i]) break;         sprintf(hs+i*2,"%02X",(unsigned char)s[i]);         i++;     }     setlocale(LC_ALL,"chs");     printf("s=%s,hs=%s\n",s,hs); // 十六进制字符串转成汉字（GBK）及字符(ASC)     strcpy(hs,"61BABA");     i=0;     while (1) {         if (1!=sscanf(hs+i*2,"%2x",&v)) break;         s[i]=(char)v;         i++;     }     s[i]=0;     printf("hs=%s,s=%s\n",hs,s);      return 0;  } //i=1024,bs=00000000000000000000010000000000 //i=1024,hs=00000400 //hs=00000400,i=1024 //bs=00000000000000000000010000000000,hs=00000400 //bs=00000000000000000000010000000000,i=1024 //hs=00000400,bs=00000000000000000000010000000000 //s=a汉,hs=61BABA //hs=61BABA,s=a汉

user: user-3
content: 不过题目说了“编写C程序……”，那就用if或switch判断具体数据类型吧。

user: user-0
content: 引用 2 楼 赵4老师的回复:C++模板了解一下。 c++刚上了一节课😅我去了解一下

user: user-3
content: C++模板了解一下。

user: user-4
content: 分别写三个函数各做各的就行，不用你自己写代码判断类型，都由人脑判断，然后去调用各自的处理函数。 库里还有abs和fabs这种呢，没啥丢人的。

user: user-2
content: 引用 8 楼 m0_52291497 的回复:[quote=引用 7 楼 mymtom的回复:] /* 输出 */ /*           20 : 00010100           40 : 0000000000101000          100 : 00000000000000000000000001100100         -100 : 11111111111111111111111110011100 */  不是直接输出答案啊用程序算出答案[/quote] 6楼是程序，这里是6楼的程序的输出

user: user-3
content: 审题！审题！审题！

user: user-0
content: 都是比我厉害的大佬，有些代码还没学过，有的学了

user: user-5
content: 引用 12 楼 user-6 的回复:感觉这题出的有问题，明明加了内存中存储的字样，却只给出了大端示例，但一般平时用的机器，小端居多。2种都给你吧。 #include<stdio.h> #include<stdlib.h> #include<string.h> typedef unsigned char UChar; int main() { 	int a; 	scanf("%d",&a); 	//按照实际内存序  	UChar* pa=(UChar*)&a; 	for(int i=0;i<sizeof(a);i++) 	{ 		UChar s = *pa; 		for(int i=7;i>=0;i--) 			printf("%d",(s>>i)&1); 		pa++; 	} 	printf("\n"); 	//按照题目示例的意思  	char binS[33]; 	ltoa(a,binS,2); 	for(int i=0;i<32-strlen(binS);i++) 		printf("%c",'0'); 	printf("%s",binS);	 	return 0; } 大小端就扯远了！重点是2进制数，所以能显示从高位低位就可以了

user: user-6
content: 感觉这题出的有问题，明明加了内存中存储的字样，却只给出了大端示例，但一般平时用的机器，小端居多。2种都给你吧。 #include<stdio.h> #include<stdlib.h> #include<string.h> typedef unsigned char UChar; int main() { 	int a; 	scanf("%d",&a); 	//按照实际内存序  	UChar* pa=(UChar*)&a; 	for(int i=0;i<sizeof(a);i++) 	{ 		UChar s = *pa; 		for(int i=7;i>=0;i--) 			printf("%d",(s>>i)&1); 		pa++; 	} 	printf("\n"); 	//按照题目示例的意思  	char binS[33]; 	ltoa(a,binS,2); 	for(int i=0;i<32-strlen(binS);i++) 		printf("%c",'0'); 	printf("%s",binS);	 	return 0; }

user: user-3
content: #include <stdio.h> #include <stdlib.h> int main() {     int i;     char b[33];     char ln[80];     char c;      while (1) {         rewind(stdin);         fgets(ln,80,stdin);         if (ln[0]=='\n') break;         if (2==sscanf(ln,"c=%d%c",&i,&c) && c=='\n' && -128<=c && c<=127) {             ltoa(i,b,2);             printf("%0*s\n", 8,b);         } else         if (2==sscanf(ln,"s=%d%c",&i,&c) && c=='\n' && -32768 && c<=32767) {             ltoa(i,b,2);             printf("%0*s\n",16,b);         } else         if (2==sscanf(ln,"i=%d%c",&i,&c) && c=='\n'                      ) {             ltoa(i,b,2);             printf("%0*s\n",32,b);         } else         if (2==sscanf(ln,"j=%d%c",&i,&c) && c=='\n'                      ) {             ltoa(i,b,2);             printf("%0*s\n",32,b);         } else {             printf("Format Error!\n");         }     }      return 0; } //输入c=20 //输出00010100 //输入s=40 //输出0000000000101000 //输入i=100 //输出00000000000000000000000001100100 //输入j=-100 //输出11111111111111111111111110011100 //输入回车 //退出程序