Denoting
  binary numbers in C
  (and in Java)
  
  
  
  
  
 
  
  
  
  
   
  
  
  -  
    Decimal numbers:
         
  
    when
       a number
       
    starts with
       a non-zero digit:
 
 
 
 -  The compiler will
      assume that
      the 
  
   number is a
      
  decimal 
  (base 10) number
 
  
 |   
 
 
Examples:
 
   
  
  
    -  
    Binary numbers:  
     
    when
       a number
       
    starts with
     0b:
 
 
 
 -  The 
  
   remaining digits are
     assumed to be
     a binary number
 
  
 |   
 
 
Examples:
 
   
  
   
  
  0b1011    ≡   binary number 1011
  0b11011   ≡   binary number 11011 
   |   
   
  
    
  
   |  
  
  
  
  
  
  
  
  
 
  
  
  
  
  Example C program that
  set the bit at position k
  revisited
  
  
  
  
  
  
  
  
  
  
   
  
  
  -  
    Revisiting
   the following  C program that
       sets the
       bit #2 and then
   sets the
   bit #4: 
   
  
   
  
int main( int argc, char* argv[] )
{
   char a = 0;		/* 0 = 00000000 */
   // Set bit 2                 
   a = a |  4;          // 4 = 00000010
                        // Result:    00000100 
   // Set bit 4
   a = a | 16;          // 16 = 00010000
                        // Result:    00010100 
}
   |   
   
  
  -  We can write the
      bit patterns
      easier using the
      0bxxxxxxxx 
   notation
    (next slide)
  
  
  
   |  
  
  
  
  
  DEMO:
  
  demo/C/set1/bit-op2.c
  
  
  
  
 
  
  
  
  
  Example C program that
  set the bit at position k
  revisited
  
  
  
  
  
  
  
  
  
  
   
  
  
  -  The same
      C program,
      but using
      binary number notations:
   
  
   
  
int main( int argc, char* argv[] )
{
   char a = 0;		/* 0 = 00000000 */
   // Set bit 2                 
   a = a | 0b100;       // bin 00000100  (leading 0's ignored)
                        // Result:    00000100 
   // Set bit 4
   a = a | 0b00010000;  // bin  00010000  (leading 0's OK)
                        // Result:    00010100 
}
   |   
   
  
    
  
   |  
  
  
  
  
  DEMO:
  
  demo/C/set1/bit-op2a.c
  
  
  
  
  There is one small 
  
  problem:  
  binary numbers can
  
    grow
  very quickly in
  length....
  
  (E.g.: 0b10000000000000000000000000000000
   )
  
  
  
  
 
  
  
  
  
  
  Review:
  octal and hexadecimal numbers
  
  
  
  
  
  
  
  
  
   
  
  
  -  
  Octal
    numbers can be
     easily converted to
      binary numbers and
      vice versa by
      considering
      groups of 
  
    3 bits:
 
 
 
 Octal digit      Binary digits     Octal digit      Binary digits
 -----------      -------------     -----------      -------------     
     0       <-->      000              4       <-->      100
     1       <-->      001		5       <-->      101
     2       <-->      010		6       <-->      110
     3       <-->      011		7       <-->      111
 |   
 
    -  
  Hexadecimal
    numbers can be
     easily converted to
      binary numbers and
      vice versa by
      considering
      groups of 
  4 bits:
 
 
 
 Hexa digit       Binary digits     Hexa digit       Binary digits
 -----------      -------------     -----------      -------------     
     0       <-->     0000              8       <-->     1000
     1       <-->     0001		9       <-->     1001
     2       <-->     0010	        A       <-->     1010
     3       <-->     0011	        B       <-->     1011
     4       <-->     0100              C       <-->     1100
     5       <-->     0101	        D       <-->     1101
     6       <-->     0110	        E       <-->     1110
     7       <-->     0111	        F       <-->     1111
 |   
 
     
  
   |  
  
  
  
  
  
  
  
  
 
  
  
  
  
  Denoting
  octal numbers and
  hexadecial number in C
  (and in Java)
  
  
  
  
  
 
  
  
  
  
   
  
  
 
  -  
     Octal numbers: 
      
  
    when
       a number
       
    starts with
     0
   followed by
   a digit:
 
 
 
 -  The 
  
   number is
     assumed to be
     a octal number
 
  
 |   
 
 
Examples:
 
   
  
   
  
  0123    ≡   octal number 123
  077     ≡   octal number 77 
   |   
   
  
    -  
     Hexadecimal numbers: 
      
  
    when
       a number
       
    starts with
     0x:
 
 
 
 -  The 
  
   remaining number is
     assumed to be
     a hexadecimal number
 
  
 |   
 
 
Examples:
 
   
  
   
  
  0xAB    ≡   hexadec number AB
  0x77    ≡   hexadec number 77 
   |   
   
  
     
  
   |  
  
  
  
  
  
  
  
  
 
  
  
  
  
  Example C program that
  set the bit at position k
  revisited using 
  octal numbers
  
  
  
  
  
  
  
  
  
  
   
  
  
  -  The following  C program that
       sets the
       bit #5 and then
   sets the
   bit #7 using
    
    0x (binary)
    number notation
   
  
   
  
int main( int argc, char* argv[] )
{
   char a = 0;		/* 0 = 00000000 */
   // Set bit 5                 
   a = a | 0b00100000;  // Binary 00100000 = Octal 040
 
   // Set bit 7
   a = a | 0b10000000;  // Binary 10000000 = Octal 200
                       
}
   |   
   
  
    
  
   |  
  
  
  
  
  
  
  
  
 
  
  
  
  
  Example C program that
  set the bit at position k
  revisited using 
  octal numbers
  
  
  
  
  
  
  
  
  
  
   
  
  
  -  The same program
        written with
      octal number notation is:
 
 
   
  
   
  
int main( int argc, char* argv[] )
{
   char a = 0;		/* 0 = 00000000 */
   // Set bit 5                 
   a = a | 040;         // Binary 00100000 = Octal 040
 
   // Set bit 7
   a = a | 0200;        // Binary 10000000 = Octal 200
                       
}
   |   
   
  
    
  
   |  
  
  
  
  
  DEMO:
  
  demo/C/set1/bit-op2b.c
  
  
  
  
 
  
  
  
  
  Example C program that
  set the bit at position k
  revisited using 
  hexadec numbers
  
  
  
  
  
  
  
  
  
  
   
  
  
  -  The same program
        written with
      hexadecimal number notation is:
 
 
   
  
   
  
int main( int argc, char* argv[] )
{
   char a = 0;		/* 0 = 00000000 */
   // Set bit 5                 
   a = a | 0x20;        // Binary 00100000 = Hex 20
 
   // Set bit 7
   a = a | 0x80;        // Binary 10000000 = Hex 80
                       
}
   |   
   
  
    
  
   |  
  
  
  
  
  DEMO:
  
  demo/C/set1/bit-op2c.c
  
  
  
  
 
  
  
  
  
  
  
  
  
 
  
  
       ❮
  
       ❯