user-0 提问: C/C++中，一个数组，如何与一个整型数比较？

回复:
user: user-1
content: 其实两种不同表示方法，转换成同一种表示方法，进行比较最简单，不会出错。  不怕麻烦的话，可以一边转换以便比较。

user: user-1
content: 多写了一个六 引用 16 楼 lm_whales 的回复: char a[16]={1,1,1,1,1,0,1,0,1,1,1,1,1,0,1,0};//一个字节表示一个位的二进制，字符数组。 char s[]="1111101011111010"; //字符串表示的二进制 （ASCII 码表示）  unsigned short b =0xFAFA;   //十六进制常量表示。C,C++语言中0xFAFA，                             //是个一些字符,编译后得到一个二进制整型常数。 unsigned short d = 64250;   //十进制常量表示。C,C++语言中0xFAFA，                             //是个一些字符,编译后得到一个二进制整型常数。 // b == d; 这两个常数，都是二进制的 1111101011111010 ; //C,C++  直接写成1111101011111010，不能表示 2 进制 //编译结果就是二进制的 1111101011111010 。（计算机内部表示，每个数字占一个位）

user: user-1
content: C，C++整型数据，是标准的二进制数据，  不过常量用 一个十进制或者8进制，16进制字符串表示。 //明确写成 1111101011111010 是   十进制常量，编译后实际是二进制，但是不是 1111101011111010这样的二进制。  C,C++ 包括格式化输入输出在内，没有二进制数的直接表示方法。  所以只能用16进制常量，代表二进制； 或者读入字符串后转换成整型数据，输出时转换为字符串输出。  所以1111101011111010 只是你认为，二进制的形式，不是C，C++ 可以表示的。 1111 1010 1111 1010 可以用字符数组，或者字符串数组表示。  不然用16进制常量表示。 这不就是 0x FAFA 么。   不然可以这么处理  char a[16]={1,1,1,1,1,0,1,0,1,1,1,1,1,0,1,0};//一个字节表示一个位的二进制，字符数组。 char s[]="1111101011111010"; //字符串表示的二进制 （ASCII 码表示）  unsigned short b =0xFAFA;   //十六进制常量表示。C,C++语言中0xFAFA，                             //是个一些字符,编译后得到一个二进制整型常数。 unsigned short d = 64250;   //十六进制常量表示。C,C++语言中0xFAFA，                             //是个一些字符,编译后得到一个二进制整型常数。 // b == d; 这两个常数，都是二进制的 1111101011111010 ; //C,C++  直接写成1111101011111010，不能表示 2 进制 //编译结果就是二进制的 1111101011111010 。     b在编译以后，就是二进制的了。 a 转换成s  s[i] =a[i] +'0'; s 转换成 a; a[i] =s[i] -'0'; a 转换成b b = (a[0])*2^N-1 +......+ (a[N]); b转换成a 就是除以二。求余数即可。  b转换成 s itoa(b,s,2);就可以了。具体实现，就是除以二。求余数，转成ASCII表示。 a转换成s 一一对应，把1，0 转换成ASCII 表示（‘1’，‘0’ ）就可以了。

user: user-2
content: int a = 7, b =8; char* buf = (char*)&a; bool res = (*(int*)buf) == b;

user: user-3
content: 你把b也转换成字符串

user: user-4
content: CString str; str.Format("%d",b); for(...) {    compare: str.at(i).atoi()== a[i]; } 上面的方法应该可以，而且不复杂

user: user-0
content: 引用 1 楼 lm_whales 的回复:1）统一格式 2）诸位比较  PS： C，C++ 不能这么定义二进制，这么定义的是10进制，已经溢出了。 int b=1111101011111010。  嗯，溢出了。 想表达“1111101011111010”对应的10进制数。 其实想知道的是C语言中怎么实现

user: user-1
content: C++用 bitset 吧。

user: user-1
content: 1）统一格式 2）诸位比较  PS： C，C++ 不能这么定义二进制，这么定义的是10进制，已经溢出了。 int b=1111101011111010。

user: user-5
content: 不知道楼主需要干什么

user: user-6
content: 用指针读值比较、不知道可不可以……

user: user-7
content: int n=sizeof(a); int m=0; for(int i=0;i<n;i++) {     m=m*10+(a[i]-'0'); } if(m==b) {      }

user: user-0
content: 引用 9 楼 whizer 的回复:[quote=引用 8 楼 whizer 的回复:] char a[16]={1,1,1,1,1,0,1,0,1,1,1,1,1,0,1,0}; int b=230; int atmp=0;  for(i=15; i>0; i--)    atmp+= (15-i)<<a[i];  if(atmp != b)    printf("equal"); else    printf("Not equal"); if(atmp != b)    printf("Not equal"); else    printf("equal");[/quote]  另外， 左移是这个的：atmp+=a[i]<<(15-i);

user: user-0
content: 引用 9 楼 whizer 的回复:[quote=引用 8 楼 whizer 的回复:] char a[16]={1,1,1,1,1,0,1,0,1,1,1,1,1,0,1,0}; int b=230; int atmp=0;  for(i=15; i>0; i--)    atmp+= (15-i)<<a[i];  if(atmp != b)    printf("equal"); else    printf("Not equal"); if(atmp != b)    printf("Not equal"); else    printf("equal");[/quote]  貌似只有这个方法最好了

user: user-8
content: 不能用c++ stl吗，那把int b，通过位操作，把每一位提取出来，与数组a[]中的对应位进行比较就行了。

user: user-9
content: 引用 8 楼 whizer 的回复:char a[16]={1,1,1,1,1,0,1,0,1,1,1,1,1,0,1,0}; int b=230; int atmp=0;  for(i=15; i>0; i--)    atmp+= (15-i)<<a[i];  if(atmp != b)    printf("equal"); else    printf("Not equal"); if(atmp != b)    printf("Not equal"); else    printf("equal");

user: user-9
content: char a[16]={1,1,1,1,1,0,1,0,1,1,1,1,1,0,1,0}; int b=230; int atmp=0;  for(i=15; i>0; i--)    atmp+= (15-i)<<a[i];  if(atmp != b)    printf("equal"); else    printf("Not equal");

user: user-10
content: 第一个数组专成整形就是了。