在做上个项目的过程中,看到了一些地方使用来位运算来进行FLAG的判断。现在大概的总结一个它在使用时的意义。
先说一下各种位运算符的含义吧
Bitwise Left Shift Operator (<<) 按位左移运算符
For example: temp = 14 << 2
The variable temp has a value of 56 because 14 (00001110 in binary) shifted left two bits equals 56 (00111000 in binary).
Bitwise Right Shift Operator (>>) 按位右移运算符
For example:temp = -14 >> 2
右移时与左移有些不同,在进行向右移动时,要使用最左侧的符号位的值进行从左侧进行补充。14 (11110010 in binary) shifted right two bits equals -4 (11111100 in binary).
Bitwise AND Operator (&) 按位与运算符
0101 (expression1)
1100 (expression2)
----
0100 (result)
感觉就是在expression1取出expression2为1所对应的那几位的值。
Bitwise OR Operator (|) 按位或运算符
0101 (expression1)
1100 (expression2)
----
1101 (result)
将expression1中的expression2为1所对应的那几位的值赋为1
下面是两个程序中的语句:
if(iqs_data_flg & ( 1 << iqs_cnt ))
我理解这个语句就应该是将iqs_data_flg 中的第iqs_cnt位的值取出来,并进行判断。
iqs_data_flg |= ( 1 << iqs_cnt )
我理解这个语句应该是将iqs_data_flg 的第iqs_cnt 位的值置为1。
先说一下各种位运算符的含义吧
Bitwise Left Shift Operator (<<) 按位左移运算符
For example: temp = 14 << 2
The variable temp has a value of 56 because 14 (00001110 in binary) shifted left two bits equals 56 (00111000 in binary).
Bitwise Right Shift Operator (>>) 按位右移运算符
For example:temp = -14 >> 2
右移时与左移有些不同,在进行向右移动时,要使用最左侧的符号位的值进行从左侧进行补充。14 (11110010 in binary) shifted right two bits equals -4 (11111100 in binary).
Bitwise AND Operator (&) 按位与运算符
0101 (expression1)
1100 (expression2)
----
0100 (result)
感觉就是在expression1取出expression2为1所对应的那几位的值。
Bitwise OR Operator (|) 按位或运算符
0101 (expression1)
1100 (expression2)
----
1101 (result)
将expression1中的expression2为1所对应的那几位的值赋为1
下面是两个程序中的语句:
if(iqs_data_flg & ( 1 << iqs_cnt ))
我理解这个语句就应该是将iqs_data_flg 中的第iqs_cnt位的值取出来,并进行判断。
iqs_data_flg |= ( 1 << iqs_cnt )
我理解这个语句应该是将iqs_data_flg 的第iqs_cnt 位的值置为1。