这道题如果把字符串里的字符转化为int型的话就是一个全加器了!!!!!!!!!!!!!
解法
char* addBinary(char* a, char* b) {
int la = strlen(a);
int lb = strlen(b);
int lr = la > lb ? la : lb;
int carry = 0;
char *res = (char*)calloc(lr + 2, sizeof(char));
res[lr + 1] = '\0';
la--; lb--;
while (la >= 0 || lb >= 0) {
int ba = la >= 0 ? a[la--] - '0' : 0;
int bb = lb >= 0 ? b[lb--] - '0' : 0;
int br = ba ^ bb ^ carry;
carry = (ba & bb) | (carry & (ba ^ bb));
res[lr--] = br + '0';
}
if (!carry) return res + 1;
res[0] = '1';
return res;
}
三目运算
calloc和malloc的区别
函数malloc()和函数calloc()的主要区别是前者不能初始化所分配的内存空间,而后者能。如果由malloc()函数分配的内存空间原来没有被使用过,则其中的每一位可能都是0;反之,如果这部分内存曾经被分配过,则其中可能遗留有各种各样的数据。
字符转int,int转char
int a='1'-'0'; a=1; //这样会先把‘1’和‘0’转化为ASCII码然后相减。
char c=1+'0'; c='1' //先把‘0’转为ASCII码和1相加,再转为字符
按位或‘ | ’
2(10)|1(10)=10|01(2)=11(2)=3(10)
逻辑&&和按位&
&&逻辑与,相当于前后两个条件都满足
&则表示数学意义多一点,将每位对应相与
异或^
1^0=1;
1^1=0;