这道题如果把字符串里的字符转化为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;