读书人

C/C++中一个数组怎么与一个整型数

发布时间: 2013-11-18 00:11:49 作者: rapoo

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含有一样的数呢?

有什么简便的方法吗C/C++中,一个数组,怎么与一个整型数比较
[解决办法]
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");
[解决办法]
引用:
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’ )就可以了。



[解决办法]

多写了一个六
引用:

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 。(计算机内部表示,每个数字占一个位)



[解决办法]
其实两种不同表示方法,转换成同一种表示方法,进行比较最简单,不会出错。

不怕麻烦的话,可以一边转换以便比较。

读书人网 >C语言

热点推荐