C语言中按位与(&)运算符是什么意思
发布时间:2025-05-12 02:29:26 发布人:远客网络
一、C语言中按位与(&)运算符是什么意思
是将二进制数按照位的对应相与,得到一个新的二进制数。1与0为0;1与1为1;0与0为0。
比如:1010 0011& 0000 1111,结果为0000 0011。也就是与上0相当于把那位数清0,与上1相当于把那位保留。
1、按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1,否则为0。参与运算的数以补码方式出现。
例如:9&5可写算式如下: 00001001(9的二进制补码)&00000101(5的二进制补码) 00000001(1的二进制补码)可见9&5=1。按位与运算通常用来对某些位清0或保留某些位。例如把a的高八位清 0,保留低八位,可作 a&255运算( 255的二进制数为11111111)。
二、C语言里的按位异或运算符
1、计算时,根据操作数a和b每位的值,计算结果,当a,b的对应位上值相同时,结果的该位上值为0,否则值为1。
2、异或,英文为exclusive OR,缩写成xor异或(xor)是一个数学运算符。它应用于逻辑运算。异或的数学符号为“⊕”,计算机符号为“xor”。其运算法则为:a⊕b=(¬a∧ b)∨(a∧¬b)
3、如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。
4、异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位,所以异或常被认作不进位加法。
三、C语言中位运算符问题 这句话怎么解释啊
1、这句话的理解有这样一个基础,那就是右移n位相当于除以2的n次方,而这个基础就是对于无符号数来说的。
2、比如无符号数8,如果用8位二进制表示,就是二进制的0000 1000,
3、右移0位,也就是不移动,等于8,就等于8除以1,也就是8除以2的0次方;
4、右移1位,0000 0100,等于4,就等于8除以2,也就是8除以2的1次方;
5、右移2位,0000 0010,等于2,就等于8除以4,也就是8除以2的2次方;
6、右移3位,0000 0001,等于1,就等于8除以8,也就是8除以2的3次方;
7、对于有符号数,最高位为符号位,>>右移运算,移动的时候符号位会被同时移动。
8、比如有符号数的-8,如果用8位二进制补码表示,就是二进制的 1111 1000,
9、右移0位,也就是不移动,等于-8,就等于8除以1,也就是8除以2的0次方;
10、如果补1进来, 1111 1100,等于-4,就等于8除以2,也就是8除以2的1次方;
11、如果补0进来, 0111 1100,等于124,就不等于8除以2了;
12、右移2位,0000 0010,等于2,就等于8除以4,也就是8除以2的2次方;
13、如果补1进来, 1111 1110,等于-2,就等于8除以4,也就是8除以2的2次方;
14、如果补0进来, 0011 1110,等于62,就不等于8除以4了;
15、右移3位,0000 0001,等于1,就等于8除以8,也就是8除以2的3次方;
16、如果补1进来, 1111 1111,等于-1,就等于8除以8,也就是8除以2的3次方;
17、如果补0进来, 0001 1111,等于31,就不等于8除以8了;
18、根据以上分析,对于带符号数负数,发现右移时有两种情况:补1(也就是符号位)进来,还能够保持除以2的n次方的关系成立;补0进来就不行。
19、不同的C编译系统根据自己的特点在这个问题上可能就采取了不同的办法。比如VC和DEV C++,对于带符号数的右移运算就采取了补符号位的方式。