Ubuntu,
linux
赋值运算符^= 异或后赋值a ^=b === a=a^b; 位操作符位异或 ^ 按二进制位进行比较,如果对应位不相同就为1, 相同就为0如 unsigned char val = 10; val ^ 0x01 ==》 0000 1010^ 0000 0001 0000 1011unsigned char a = 0x12;unsigned char b = 0xab;unsigned char c = a^b ; ===> ?unsigned char d = c^b ; ===> ?unsigned char e = c^d ; 见图
作用:1)用来比较全部位数是否相同,只有有一位不相同返回的就是非0; 如果全部位都相同 返回0;2)可以实现两数交换unsigned char a = 0x12;unsigned char b = 0xab; a = a^b ;// 新的a值为 0xb9 b = a^b; // 新b为0x12 a = a^b;// 新a为0xab 还可以写成:a^=b;b^=a;a^=b;
思考: 要实现两数的交换,可以想到几种方式?用代码确定效果 (3~~4种)int a = 0x12;int b = 0xab; 1) 异或a^=b ;b^=a;a^=b; 2) 使用额外变量暂存 int temp ; temp = a ; a = b ;// 把b的值赋给a b = temp ; // 把之前a的值赋给b 3) 利用加减法a = a+b;b = a-b;a = a-b; 4) 利用乘除法a = a*b;b = a/b;a = a/b;
如果在同一个表达式中, 对同一个变量进行了多次赋值, 结果是undefined的, 没有定义, 因为这个结果是有编译器的处理方式决定的
位反 ~把数据的每一位都取反 (注意不是反码) char val = 100; // 0x64 ~val ==> ~0110 0100 ==》 1001 1011 常和位与、位或操作配合使用例:要保证val的第3位为0val & 0b11110111 ====== val &( ~0x08 )
其它运算符sizeof() 计算对应的类型或者是变量所占用的空间大小,以字节为单位printf( “int is %ld Btyet(s) \n”, sizeof(int)) ;int a ;printf( “int is %ld Btyet(s) \n”, sizeof(a)) 确认所有基本数据类型所占用的空间大小char 1 short 2int 4 float 4 long 8 double 8 long double 16bool 1
练习:定义三个同类型变量a,b,c 分别赋值; 通过一个表达式得到最大值,并打印出来 , int a = (100 , 200);最终a的值是200,因为()最后为200 运算符的优先级:(对应
补充及练习:如图
“经验是茶,需要您去品!”
打击盗版