今天,我们来看看C语言的底层操作——位运算。
任何数据在计算机的内部都是以二进制码形式进行存储,如:A的存储形式为01000001。所以,位运算就是以逐个二进制位为直接处理对象的运算。
位运算符:(~求反)(&按位与)(|按位或)(^异或)(>>右移)(
以上的位运算符除求反为单目运算符外其他皆为双目运算符。
所有位运算符的操作对象必须是整数,两个操作数类型可以不同但一定要遵循一般算数转换规则(即少转多)。结果类型是转换后的类型,结果的值与有符号或无符号数有关。
先看一下,求反:
求反~:是将操作数的每一位二进制位取成相反值,即0变1,1变0。
如:unsiged i=0xd3f5; short k=0;
再看一下,按位与:
按位与&:它是将左右两个运算量全1则是1,有0则是0。
如:10&11=10
z=0xd3f5&0xff;其值为0xf5,即0xd3f5通过与0xff按位与取了它的低8位,而高8位被屏蔽了,0xff称为屏蔽码。
再看下一个,按位或:
按位或|:它是将左右两个运算量全0则是0,有1则是1.
如:10|1=11
z=0xd3f5|0xff;其值为0xd3ff,即0xd3f5通过与0xff按位或运算,让原来的数高8位不变而低8位全变为1,0xff称为置位码。
再说一下,异或:
异或^:左右两个运算量相同为0,相异为1。
如:10^11=1
z=0xd3f5^0xff;其值为0xd30a,低8位取反其余不变。
最后看看移位,即>>右移和
移位运算是将左操作数向左或向右移动,其移动的位数由右操作数指定。
要求两个操作数必须为整数,且右操作数为正数,其结果类型与转换后的左操作数相同。在操作数向左移时,高位被挤掉,右边空出的低位有0区补充。在操作数向右移时,左边空出的高位填充方式由右操作数类型决定,如无符号则用0填充。
ps:x>n,相当于y整除2n。
下面来看看,复合赋值运算及其编程的运用。
在C语言中,赋值操作是作为一种表达式来处理的。赋值运算符(=)可以和算术运算符(+ - * / %)及双目运算符(& | ^ >>
复合赋值运算符:+=,-=,*=,/=,%=,&=,|=,^=,>=,共十个!
复合赋值运算符的应用格式:
操作数1 OP=操作数2 其展开形式为:操作数1=操作数1 OP 操作数2
例如:i+=1 可理解为i=i+1 注意,等式左侧的运算量必须是变量。
下面看看演示:
最后,总结一下赋值运算符。
赋值运算符之间不能加任何其他符号(包括空格),在运算过程中先将右侧计算完后得出结果再进行复合赋值运算符的计算。
ok,C语言的基础知识就告一段落了!
下面将迎来更实际的运用,让我们一同期待!
领取专属 10元无门槛券
私享最新 技术干货