C语言里的按位异或运算符

C语言中1^8怎么算?^是按位异或运算符~

1和8都是int型,且都是正整数,内存中原码形式存储
1的原码是00000000 00000000 00000000 0000001
8的原码是00000000 00000000 00000000 0001000

按位异或,顾名思义是对应的二进制位计算,口诀相同0,相异为1.就是对应的二进制位,相同的话该二进制位计算出来是0,不同的话计算出来才是1

举例:
0
^ 0
-----
0

***************

1
^1
---------
0

************

0
^1
------------
1

**************************************

所以
00000000 00000000 00000000 0000001
^00000000 00000000 00000000 0001000
----------------------------------------------------
00000000 00000000 00000000 0001001

这个二进制数按照原码解释,对应9
所以结果是9

位运算

在很多系统程序中常要求在位(bit)一级进行运算或处理。C语言提供了位运算的功能, 这使得C语言也能像汇编语言一样用来编写系统程序。

一、位运算符C语言提供了六种位运算符:

& 按位与
| 按位或
^ 按位异或
~ 取反
<< 左移
>> 右移


1. 按位与运算 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。

例如:9&5可写算式如下: 00001001 (9的二进制补码)&00000101 (5的二进制补码) 00000001 (1的二进制补码)可见9&5=1。

按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a&255 运算 ( 255 的二进制数为0000000011111111)。
main(){
int a=9,b=5,c;
c=a&b;
printf("a=%d
b=%d
c=%d
",a,b,c);
}


2. 按位或运算 按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。
例如:9|5可写算式如下: 00001001|00000101
00001101 (十进制为13)可见9|5=13
main(){
int a=9,b=5,c;
c=a|b;
printf("a=%d
b=%d
c=%d
",a,b,c);
}

3. 按位异或运算 按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现,例如9^5可写成算式如下: 00001001^00000101 00001100 (十进制为12)
main(){
int a=9;
a=a^15;
printf("a=%d
",a);
}

4. 求反运算 求反运算符~为单目运算符,具有右结合性。 其功能是对参与运算的数的各二进位按位求反。例如~9的运算为: ~(0000000000001001)结果为:1111111111110110

5. 左移运算 左移运算符“<<”是双目运算符。其功能把“<< ”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,
高位丢弃,低位补0。例如: a>”是双目运算符。其功能是把“>> ”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。
例如:设 a=15,a>>2 表示把000001111右移为00000011(十进制3)。应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时, 最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定。Turbo C和很多系统规定为补1。
main(){
unsigned a,b;
printf("input a number: ");
scanf("%d",&a);
b=a>>5;
b=b&15;
printf("a=%db=%d
",a,b);
}
请再看一例!
main(){
char a='a',b='b';
int p,c,d;
p=a;
p=(p<<8)|b;
d=p&0xff;
c=(p&0xff00)>>8;
printf("a=%d
b=%d
c=%d
d=%d
",a,b,c,d);
}

按位异或,其操作符为^,形式为
a^b
计算时,根据操作数a和b每位的值,计算结果,当a,b的对应位上值相同时,结果的该位上值为0,否则值为1。

char a = 0x12, b = 0x34;
a^b
= 0x12 ^ 0x34
= B0001 0010 ^ B0011 0100
= B0010 0110
=0x26

扩展资料:

异或,英文为exclusive OR,缩写成xor异或(xor)是一个数学运算符。它应用于逻辑运算。异或的数学符号为“⊕”,计算机符号为“xor”。其运算法则为:a⊕b = (¬a ∧ b) ∨ (a ∧¬b)

如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。

异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位,所以异或常被认作不进位加法。

参考资料:异或百度百科



第一、C语言中异或运算符为^,顾名思义就是不同为1,相同为0;具体就是0^0等于0,1^1等于0,0^1等于1,1^0等于1;

第二、异或运算的用途:First:可以是使一个数中的某些特定位进行翻转;例如对整数10100001(即整数161在进行位运算过程中,是以补码的形式操作的)中的第1位和第3位进行翻转(最低位【即权值最小,即最右侧】),用00000111与其做异或运算即可;Second:可以实现两个值的交换,而不需要借助temp,如 int a=12,b=161; a=a^b;b=b^a;a=a^b;进行操作后,a=161,b=12;Third:a=a^b^b;进行这波操作后a还是原来的a;
第三、谢谢各位看官,初来乍到,多多支持(点赞)

1:“按位与”运算符(&)用法是如果两个相应的二进制位都为1,则该位的结果值为1否则为0。0&0=0,1&0=0,1&1=1
2:“按位或”运算符(|)用法是如果两个相应的二进制位有一个为1,则该位的结果值为1否则为0。0&0=0,1&0=0,1&1=1
0,1&0=1,1&1=1
3:“异或”运算符(^)用法是如果两个相应的二进制位为同号,则该位的结果值为1否则为0。0&0=1,1&0=0,1&1=1

1:“按位与”运算符(&)全1为1,有0则0。0&0=0,1&0=0,1&1=1
2:“按位或”运算符(|)有1则1,全0则0。0|0=0,1|0=1, 1|1=1
3:“异或”运算符(^)相同为0,不同为1。0^0=0,1^0=1,1^1=0

C语言中^为按位异或运算符,若两个二进制位相同,则结果为0,不同为1

#include "stdio.h"
main()
{
int a=6,b=10,c;
c=a^b;
printf("%d",c);
}
函数输出结果为12

将6和10分别转换为2进制数为0110(前边补了个0)和1010。然后按照定义进行异或运算

0110 a
1010 b
1100 a和b最左边第一位和第二位不相同,所以分别为1,第三位和第四位相同,所以分别为0

二进制数1100转换为10进制数,结果是12。

C语言里的按位异或运算符
答:按位异或,其操作符为^,形式为a^b计算时,根据操作数a和b每位的值,计算结果,当a,b的对应位上值相同时,结果的该位上值为0,否则值为1。如char a = 0x12, b = 0x34;a^b= 0x12 ^ 0x34= B0001 0010 ^ B0011 0100= B0010 0110=0x26 ...

在c语言里面,^是什么意思啊?
答:符号^在c语言里是“按位异或”的意思。按位异或运算 按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现,例如9^5可写成算式如下: 00001001^00000101 00001100 (十进制为12)main(){int a=9;a=a^15;print...

C语言中^代表什么?什么意思?
答:C语言中“ ∧ ”是“按位异或”运算符(Bitwise exclusive OR operator)。整数在计算机中用二进制的位来表示,C语言提供一些运算符可以直接操作整数中的位,称为位运算,这些运算符的操作数都必须是整型的。按位异或运算符“^”是双目运算符。 其功能是参与运算的两数各对应的二进位相异或,当两对应...

C语言里的按位异或运算符
答:C语言位运算符:与、或、异或、取反、左移和右移 位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。C语言提供了6个位操作运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型。& 按位与 如果两个相应的二进制位都为1,则该位的...

C语言中有 ^ 这个运算符吗?
答:按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。还比如 m=9(二进制1001),n=12(二进制1100),那么 m ^ n的结果是5(二进制0101)。整数在计算机中用二进制的位来表示,C语言提供一些运算符可以直接操作整数中的位,称为...

C语言当中a^=a+b是什么意思?
答:在C语言中,a^=a+b是一个复合赋值运算符,它相当于a=a^(a+b)。其中,^是按位异或运算符,它对二进制位进行操作,当两个对应的二进制位相同时,结果对应的二进制位为0,否则为1。因此,a^=a+b的意思是将a与(a+b)进行按位异或运算,然后将结果赋值给a。这个操作相当于将a的二进制位和(...

C语言中 运算符&是什么意思?
答:&: 在C语言中有两种意思,一种是取地址符,是单目运算符;另一种是位运算符,表示“按位与”,是双目运算符。|: 是位运算符,表示“按位或”。资料扩展1、符号 & 和 | 这两个运算符都是二进制的按位操作符。&: 二进制“与”(都为1时,结果是1,否则是0。),比如:1010 & 1011 = 1010...

c语言中^是什么意思
答:^是按位异或的意思。对于每个数字都可以表示成二进制,然后分别对相对应的数字求结果。规则是同0异1,如:0000^1111 结果就为1111

C语言中x^y是什么意思?
答:x^y的意思是按位异或,当两个数的二进制表示,进行异或运算时,当前位的两个二进制表示不同则为1相同则为0。也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1),这些法则与加法...

IT评价网,数码产品家用电器电子设备等点评来自于网友使用感受交流,不对其内容作任何保证

联系反馈
Copyright© IT评价网