C/C++中,一个数组,如何与一个整型数比较?
现有一个数组,一个整型数。如:
char a[16]={1,1,1,1,1,0,1,0,1,1,1,1,1,0,1,0};
int b=1111101011111010。
如何比较a[]、b含有一样的数呢?
有什么简便的方法吗
[解决办法]
1)统一格式
2)诸位比较
PS:
C,C++ 不能这么定义二进制,这么定义的是10进制,已经溢出了。
int b=1111101011111010。
[解决办法]
CString str;
str.Format("%d",b);
for(...)
{
compare: str.at(i).atoi()== a[i];
}
上面的方法应该可以,而且不复杂
[解决办法]
你把b也转换成字符串
[解决办法]
int a = 7, b =8;
char* buf = (char*)&a;
bool res = (*(int*)buf) == b;
[解决办法]
第一个数组专成整形就是了。
[解决办法]
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");
[解决办法]
不能用c++ stl吗,那把int b,通过位操作,把每一位提取出来,与数组a[]中的对应位进行比较就行了。
[解决办法]
int n=sizeof(a);
int m=0;
for(int i=0;i<n;i++)
{
m=m*10+(a[i]-'0');
}
if(m==b)
{
}
[解决办法]
用指针读值比较、不知道可不可以……
[解决办法]
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’ )就可以了。
[解决办法]
多写了一个六
[解决办法]
其实两种不同表示方法,转换成同一种表示方法,进行比较最简单,不会出错。
不怕麻烦的话,可以一边转换以便比较。