C语言 字符串 按位与 C语言中按位与(&)运算符是什么意思?

C\u8bed\u8a00\u4e2d\u6309\u4f4d\u4e0e\uff08&\uff09\u8fd0\u7b97\u7b26\u662f\u4ec0\u4e48\u610f\u601d

\u662f\u5c06\u4e8c\u8fdb\u5236\u6570\u6309\u7167\u4f4d\u7684\u5bf9\u5e94\u76f8\u4e0e\uff0c\u5f97\u5230\u4e00\u4e2a\u65b0\u7684\u4e8c\u8fdb\u5236\u6570\u30021\u4e0e0\u4e3a0\uff1b1\u4e0e1\u4e3a1\uff1b0\u4e0e0\u4e3a0\u3002
\u5206\u6790\u5982\u4e0b\uff1a
\u5c31\u662f\u4e8c\u8fdb\u5236\u7684\u6bcf\u4e00\u4f4d\u76f8\u4e0e\u3002
\u6bd4\u5982\uff1a1010 0011& 0000 1111\uff0c\u7ed3\u679c\u4e3a0000 0011\u3002\u4e5f\u5c31\u662f\u4e0e\u4e0a0\u76f8\u5f53\u4e8e\u628a\u90a3\u4f4d\u6570\u6e050\uff0c\u4e0e\u4e0a1\u76f8\u5f53\u4e8e\u628a\u90a3\u4f4d\u4fdd\u7559\u3002

\u6269\u5c55\u8d44\u6599\uff1a
1\u3001\u6309\u4f4d\u4e0e\u8fd0\u7b97\u7b26"&"\u662f\u53cc\u76ee\u8fd0\u7b97\u7b26\u3002 \u5176\u529f\u80fd\u662f\u53c2\u4e0e\u8fd0\u7b97\u7684\u4e24\u6570\u5404\u5bf9\u5e94\u7684\u4e8c\u8fdb\u4f4d\u76f8\u4e0e\u3002\u53ea\u6709\u5bf9\u5e94\u7684\u4e24\u4e2a\u4e8c\u8fdb\u4f4d\u5747\u4e3a1\u65f6\uff0c\u7ed3\u679c\u4f4d\u624d\u4e3a1 \uff0c\u5426\u5219\u4e3a0\u3002\u53c2\u4e0e\u8fd0\u7b97\u7684\u6570\u4ee5\u8865\u7801\u65b9\u5f0f\u51fa\u73b0\u3002
\u4f8b\u5982\uff1a9&5\u53ef\u5199\u7b97\u5f0f\u5982\u4e0b\uff1a 00001001 (9\u7684\u4e8c\u8fdb\u5236\u8865\u7801)&00000101 (5\u7684\u4e8c\u8fdb\u5236\u8865\u7801) 00000001 (1\u7684\u4e8c\u8fdb\u5236\u8865\u7801)\u53ef\u89c19&5=1\u3002 \u6309\u4f4d\u4e0e\u8fd0\u7b97\u901a\u5e38\u7528\u6765\u5bf9\u67d0\u4e9b\u4f4d\u6e050\u6216\u4fdd\u7559\u67d0\u4e9b\u4f4d\u3002\u4f8b\u5982\u628aa \u7684\u9ad8\u516b\u4f4d\u6e05 0 \uff0c \u4fdd\u7559\u4f4e\u516b\u4f4d\uff0c \u53ef\u4f5c a&255 \u8fd0\u7b97 ( 255 \u7684\u4e8c\u8fdb\u5236\u6570\u4e3a11111111)\u3002
\u53c2\u8003\u8d44\u6599\uff1a\u767e\u5ea6\u767e\u79d1\uff1a\u4f4d\u8fd0\u7b97\u7b26

\u4f4d\u8fd0\u7b97\u7b26\u5c31\u662f\u76f4\u63a5\u5bf9\u6574\u6570\u5728\u5185\u5b58\u4e2d\u7684\u4e8c\u8fdb\u5236\u4f4d\u8fdb\u884c\u64cd\u4f5c\u8fd0\u7b97\u3002\u6bd4\u5982\uff0c&&\u8fd0\u7b97\u672c\u6765\u662f\u4e00\u4e2a\u903b\u8f91\u8fd0\u7b97\u7b26\uff0c\u4f46\u6574\u6570\u4e0e\u6574\u6570\u4e4b\u95f4\u53ef\u4ee5\u7528&\u8fdb\u884c\u8fd0\u7b97\u3002\u4e3e\u4e2a\u4f8b\u5b50\uff0c6\u7684\u4e8c\u8fdb\u5236\u662f110\uff0c11\u7684\u4e8c\u8fdb\u5236\u662f1011\uff0c\u90a3\u4e486 & 11\u7684\u7ed3\u679c\u5c31\u662f2\uff0c\u5b83\u662f\u4e8c\u8fdb\u5236\u5bf9\u5e94\u4f4d\u8fdb\u884c\u903b\u8f91\u8fd0\u7b97\u7684\u7ed3\u679c\uff080\u8868\u793aFalse\uff0c1\u8868\u793aTrue\uff0c\u7a7a\u4f4d\u90fd\u5f530\u5904\u7406\uff09\u3002C\u8bed\u8a00\u63d0\u4f9b\u4e86\u516d\u79cd\u6309\u4f4d\u8fd0\u7b97\u7b26\uff1a& \u6309\u4f4d\u4e0e| \u6309\u4f4d\u6216^ \u6309\u4f4d\u5f02\u6216~ \u53d6\u53cd> \u53f3\u79fb
\u4e5f\u5c31\u662f\u4e0e\u4e0a0\u76f8\u5f53\u4e8e\u628a\u90a3\u4f4d\u6570\u6e050\uff0c\u4e0e\u4e0a1\u76f8\u5f53\u4e8e\u628a\u90a3\u4f4d\u4fdd\u7559\u3002
C\u8bed\u8a00\u662f\u4e00\u95e8\u901a\u7528\u8ba1\u7b97\u673a\u7f16\u7a0b\u8bed\u8a00\uff0c\u5e94\u7528\u5e7f\u6cdb\u3002C\u8bed\u8a00\u7684\u8bbe\u8ba1\u76ee\u6807\u662f\u63d0\u4f9b\u4e00\u79cd\u80fd\u4ee5\u7b80\u6613\u7684\u65b9\u5f0f\u7f16\u8bd1\u3001\u5904\u7406\u4f4e\u7ea7\u5b58\u50a8\u5668\u3001\u4ea7\u751f\u5c11\u91cf\u7684\u673a\u5668\u7801\u4ee5\u53ca\u4e0d\u9700\u8981\u4efb\u4f55\u8fd0\u884c\u73af\u5883\u652f\u6301\u4fbf\u80fd\u8fd0\u884c\u7684\u7f16\u7a0b\u8bed\u8a00\u3002
C\u8bed\u8a00\u662f\u4e00\u4e2a\u6709\u7ed3\u6784\u5316\u7a0b\u5e8f\u8bbe\u8ba1\u3001\u5177\u6709\u53d8\u91cf\u4f5c\u7528\u57df\uff08variable scope\uff09\u4ee5\u53ca\u9012\u5f52\u529f\u80fd\u7684\u8fc7\u7a0b\u5f0f\u8bed\u8a00\u3002C\u8bed\u8a00\u4f20\u9012\u53c2\u6570\u5747\u662f\u4ee5\u503c\u4f20\u9012\uff08pass by value\uff09\uff0c\u53e6\u5916\u4e5f\u53ef\u4ee5\u4f20\u9012\u6307\u9488\uff08a pointer passed by value\uff09\u3002\u4e0d\u540c\u7684\u53d8\u91cf\u7c7b\u578b\u53ef\u4ee5\u7528\u7ed3\u6784\u4f53\uff08struct\uff09\u7ec4\u5408\u5728\u4e00\u8d77\u3002\u53ea\u670932\u4e2a\u4fdd\u7559\u5b57\uff08reserved keywords\uff09\uff0c\u4f7f\u53d8\u91cf\u3001\u51fd\u6570\u547d\u540d\u6709\u66f4\u591a\u5f39\u6027\u3002\u90e8\u4efd\u7684\u53d8\u91cf\u7c7b\u578b\u53ef\u4ee5\u8f6c\u6362\uff0c\u4f8b\u5982\u6574\u578b\u548c\u5b57\u7b26\u578b\u53d8\u91cf\u3002\u901a\u8fc7\u6307\u9488\uff08pointer\uff09\uff0cC\u8bed\u8a00\u53ef\u4ee5\u5bb9\u6613\u7684\u5bf9\u5b58\u50a8\u5668\u8fdb\u884c\u4f4e\u7ea7\u63a7\u5236\u3002\u9884\u7f16\u8bd1\u5904\u7406\uff08preprocessor\uff09\u8ba9C\u8bed\u8a00\u7684\u7f16\u8bd1\u66f4\u5177\u6709\u5f39\u6027\u3002

1、按位运算符就是直接对整数在内存中的二进制位进行操作运算。比如,&&运算本来是一个逻辑运算符,但整数与整数之间可以用&
进行运算。举个例子,6的二进制是110,11的二进制是1011,那么6 &
11的结果就是2,它是二进制对应位进行逻辑运算的结果(0表示False,1表示True,空位都当0处理)。

2、C语言提供了六种按位运算符:
& 按位与
| 按位或
^ 按位异或
~ 取反
<< 左移
>> 右移

3、字符串的按位与运算:
int len=strlen(str1); //假定str1与str2长度相等,若不相同,再根据要求调整代码。
char str[50]="\0";
for(int i=0;i<len&&i<50;i++)
str[i]='0'+((str1[i]-'0')&(str2[i]-'0'))

int len=strlen(str1); //假定str1与str2长度相等,若不相同,再根据要求调整代码。
char str[50]="\0";
for(int i=0;i<len&&i<50;i++)
str[i]='0'+((str1[i]-'0')&(str2[i]-'0'))

在函数尾部加入
char *p = str1;
char *q = str2;

while (*p && *q)
{
if (*q == '0')
*p = '0';
p++;
q++;
}
printf("%s\n", p);
getchar();
return 0;

默认你输入的字符串长度相等啊,如果不等,你得用0补齐,怎么补齐很简单,我就说主要的按位与了:

int i=0;
for(i=0; i<strlen(str1); i++) //这里默认str1和str2 的长度是一样的,与的结果就保存在str1中了
{
str1[i]=(char)(48+(str1[i]-'0')&(str2[i]-'0')) ; //要转换成字符存储
}

 // 编写的以高位相与的函数:

char *str;
void stringv(char *str1,char *str2)
{
 int i;
 for(i=0;str1[i]!='\0'&&str[i]!='\0';i++)
   str[i]=(str1[i]-0x30)&(str2[i]-0x30)+0x30;
 str[i]='\0';
}


扩展阅读:c#语言翻译器 ... c++ 截取字符串 ... 字符串相加 c ... c 输入字符串 ... c++ 字符串 ... c++字符串比较 ... c语言字符对照表 ... c语言取字符串后六位 ... c 数字转字符串 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网