Bitwise operations


Bitwise operators include:

& AND
&= AND
| OR
|= OR
^ XOR
~ one's compliment
<< Shift Left
>> Shift Right
<<= Shift Left
>>=Shift Right


AND OR and XOR

These require two operands and will perform bit comparisions.

AND & will copy a bit to the result if it exists in both operands.

  
  main()
  {
    unsigned int a = 60;	/* 60 = 0011 1100 */  
    unsigned int b = 13;	/* 13 = 0000 1101 */
    unsigned int c = 0;           

    c = a & b;                  /* 12 = 0000 1100 */ 
  }

OR | will copy a bit if it exists in eather operand.

  
  main()
  {
    unsigned int a = 60;	/* 60 = 0011 1100 */  
    unsigned int b = 13;	/* 13 = 0000 1101 */
    unsigned int c = 0;           

    c = a | b;                  /* 61 = 0011 1101 */ 
  }

XOR ^ copies the bit if it is set in one operand (but not both).

  
  main()
  {
    unsigned int a = 60;	/* 60 = 0011 1100 */  
    unsigned int b = 13;	/* 13 = 0000 1101 */
    unsigned int c = 0;           

    c = a ^ b;                  /* 49 = 0011 0001 */ 
  }


Ones Complement

This operator is unary (requires one operand) and has the efect of 'flipping' bits.


  main()
  {
    unsigned int Value=4;          /*   4 = 0000 0100 */  

    Value = ~ Value;               /* 251 = 1111 1011 */  

  }


Bit shift.

The following
operators can be used for shifting bits left or right.

<< >> <<= >>=

The left operands value is moved left or right by the number of bits specified by the right operand. For example:


  main()
  {
    unsigned int Value=4;          /*  4 = 0000 0100 */  
    unsigned int Shift=2;

    Value = Value << Shift;        /* 16 = 0001 0000 */  

    Value <<= Shift;               /* 64 = 0100 0000 */  

    printf("%d\n", Value);         /* Prints 64      */  
  }

Usually, the resulting 'empty' bit is assigned ZERO. Please use unsigned variables with these operators to avoid unpredictable results.


Examples:

AND
OR
Bit shifting.

Problem:

Bit shifting problem.

See Also:

All the other Expressions and operators.
Operator precedence.
Assignment Operators.

Top Master Index Keywords Functions


Martin Leslie
td>
authorThomas Gleixner <tglx@linutronix.de>2017-01-31 09:37:34 +0100
committerThomas Gleixner <tglx@linutronix.de>2017-01-31 21:47:58 +0100
commit0becc0ae5b42828785b589f686725ff5bc3b9b25 (patch)
treebe6d0e1f37c38ed0a7dd5da2d4b1e93f0fb43101 /sound/soc/samsung/i2s.h
parent24c2503255d35c269b67162c397a1a1c1e02f6ce (diff)
x86/mce: Make timer handling more robust
Erik reported that on a preproduction hardware a CMCI storm triggers the BUG_ON in add_timer_on(). The reason is that the per CPU MCE timer is started by the CMCI logic before the MCE CPU hotplug callback starts the timer with add_timer_on(). So the timer is already queued which triggers the BUG. Using add_timer_on() is pretty pointless in this code because the timer is strictlty per CPU, initialized as pinned and all operations which arm the timer happen on the CPU to which the timer belongs. Simplify the whole machinery by using mod_timer() instead of add_timer_on() which avoids the problem because mod_timer() can handle already queued timers. Use __start_timer() everywhere so the earliest armed expiry time is preserved. Reported-by: Erik Veijola <erik.veijola@intel.com> Tested-by: Borislav Petkov <bp@alien8.de> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Borislav Petkov <bp@alien8.de> Cc: Tony Luck <tony.luck@intel.com> Link: http://lkml.kernel.org/r/alpine.DEB.2.20.1701310936080.3457@nanos Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'sound/soc/samsung/i2s.h')