Csharp/C Sharp/Language Basics/Operator bitwise
Содержание
- 1 A class that displays the binary representation of a value
- 2 Bit and, or, xor, not operator
- 3 Bit move operator
- 4 Bit operator
- 5 Bit Operators: move
- 6 Bit Shift operator
- 7 Bitwise operation
- 8 Bitwise Operators 2
- 9 Demonstrate the bitwise NOT
- 10 Demonstrate the shift operators
- 11 Display the bits within a byte
- 12 Shift Operators 2
- 13 Show bits
- 14 Use bitwise AND to determine if a number is odd
- 15 Use bitwise AND to make a number even
- 16 Use bitwise OR to make a number odd
- 17 Use the shift operators to multiply and divide by 2
- 18 Use XOR to encode and decode a message
A class that displays the binary representation of a value
<source lang="csharp"> /* C# A Beginner"s Guide By Schildt Publisher: Osborne McGraw-Hill ISBN: 0072133295
- /
/*
Project 5-3 A class that displays the binary representation of a value.
- /
using System;
class ShowBits {
public int numbits; public ShowBits(int n) { numbits = n; } public void show(ulong val) { ulong mask = 1; // left-shift a 1 into the proper position mask <<= numbits-1; int spacer = 0; for(; mask != 0; mask >>= 1) { if((val & mask) != 0) Console.Write("1"); else Console.Write("0"); spacer++; if((spacer % 8) == 0) { Console.Write(" "); spacer = 0; } } Console.WriteLine(); }
}
// Demonstrate ShowBits. public class ShowBitsDemo {
public static void Main() { ShowBits b = new ShowBits(8); ShowBits i = new ShowBits(32); ShowBits li = new ShowBits(64); Console.WriteLine("123 in binary: "); b.show(123); Console.WriteLine("\n87987 in binary: "); i.show(87987); Console.WriteLine("\n237658768 in binary: "); li.show(237658768); // you can also show low-order bits of any integer Console.WriteLine("\nLow order 8 bits of 87987 in binary: "); b.show(87987); }
}
</source>
Bit and, or, xor, not operator
<source lang="csharp"> using System; class LogOpsApp {
public static void display(byte left, byte right, byte ans, string op) { string Lstr = null; string Rstr = null; string Astr = null; Lstr = Convert.ToString(left, 2); if (0 != right) Rstr = Convert.ToString(right, 2); else Rstr = "--------"; Astr = Convert.ToString(ans, 2); Console.WriteLine("\t{0,8}\n{1}\t{2,8}\n\t{3,8}\n",Lstr, op, Rstr, Astr); } static void Main(string[] args) { byte a, b, c, d, e, f, g; a = 255; b = 132; c = 85; byte OneOperand = 0; d = (byte)(a & b); display (a, b, d, "&"); e = (byte)(d | c); display (d, c, e, "|"); f = (byte)(e ^ a); display (e, a, f, "^"); g = (byte)~f; display (f, OneOperand, g, "~"); }
}
</source>
Bit move operator
<source lang="csharp"> using System; class Operators {
static void Main() { int a = 256, b = 128, c, d; c = a >> 1; d = b << 1; Console.WriteLine("{0}", c); //128 Console.WriteLine("{0}", d); //256 }
}
</source>
Bit operator
<source lang="csharp"> using System; class Operators {
static void Main() { int a = 10, b = 15, c = 20, d, e, h, i; bool f, g, j = (a == b), k; d = (a & b); e = (a | b); f = (j && (b == c)); g = (j || (b == c)); h = (a ^ b); i = ~b; k = !j; Console.WriteLine("{0}", d); //10 Console.WriteLine("{0}", e); //15 Console.WriteLine("{0}", f); //False Console.WriteLine("{0}", g); //False Console.WriteLine("{0}", h); //5 Console.WriteLine("{0}", i); //-16 Console.WriteLine("{0}", j); //False Console.WriteLine("{0}", k); //True }
}
</source>
Bit Operators: move
<source lang="csharp">
using System; class MainClass {
static void Main(string[] args) { int i = 1; for (int j = 0; j < 8; j++) { Console.WriteLine( "{0} << {1} = {2}", i, j, i << j); } }
}
</source>
Bit Shift operator
<source lang="csharp"> using System; class CompoundBitOpsApp {
static void Main(string[] args) { for (byte j = 0; j < 8; j++) { byte k = 1; Console.WriteLine( "1 <<= {0,3} ({1}) = {2,8} ({3,3})", Convert.ToString(j, 2), j, Convert.ToString((k <<= j), 2), k); } }
}
</source>
Bitwise operation
<source lang="csharp"> /* C# Programming Tips & Techniques by Charles Wright, Kris Jamsa Publisher: Osborne/McGraw-Hill (December 28, 2001) ISBN: 0072193794
- /
namespace nsBitwise {
using System; public class Bitwise345 { static public void Main () { char ch = "a"; char toggle = (char) 0x20; for (int x = 0; x < 4; ++x) { Console.WriteLine ("In iteration {0}, ch = {1}", x + 1, (char) ch); ch = (char) (ch ^ toggle); } } }
}
</source>
Bitwise Operators 2
<source lang="csharp"> /*
* C# Programmers Pocket Consultant * Author: Gregory S. MacBeth * Email: gmacbeth@comporium.net * Create Date: June 27, 2003 * Last Modified Date: */
using System; namespace Client.Chapter_2___Operators_and_Excpressions {
public class BitwiseOperators { static void Main(string[] args) { long MyBit = 0x1; long MyBitResult = 0; MyBitResult = MyBit & 0x1; MyBitResult = MyBit | 0x2; MyBitResult = MyBit ^ 0x4; } }
}
</source>
Demonstrate the bitwise NOT
<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852
- /
// Demonstrate the bitwise NOT. using System;
public class NotDemo {
public static void Main() { sbyte b = -34; int t; for(t=128; t > 0; t = t/2) { if((b & t) != 0) Console.Write("1 "); if((b & t) == 0) Console.Write("0 "); } Console.WriteLine(); // reverse all bits b = (sbyte) ~b; for(t=128; t > 0; t = t/2) { if((b & t) != 0) Console.Write("1 "); if((b & t) == 0) Console.Write("0 "); } }
}
</source>
Demonstrate the shift operators
<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852
- /
// Demonstrate the shift << and >> operators. using System;
public class ShiftDemo {
public static void Main() { int val = 1; int t; int i; for(i = 0; i < 8; i++) { for(t=128; t > 0; t = t/2) { if((val & t) != 0) Console.Write("1 "); if((val & t) == 0) Console.Write("0 "); } Console.WriteLine(); val = val << 1; // left shift } Console.WriteLine(); val = 128; for(i = 0; i < 8; i++) { for(t=128; t > 0; t = t/2) { if((val & t) != 0) Console.Write("1 "); if((val & t) == 0) Console.Write("0 "); } Console.WriteLine(); val = val >> 1; // right shift } }
}
</source>
Display the bits within a byte
<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852
- /
// Display the bits within a byte. using System;
public class ShowBits {
public static void Main() { int t; byte val; val = 123; for(t=128; t > 0; t = t/2) { if((val & t) != 0) Console.Write("1 "); if((val & t) == 0) Console.Write("0 "); } }
}
</source>
Shift Operators 2
<source lang="csharp"> /*
* C# Programmers Pocket Consultant * Author: Gregory S. MacBeth * Email: gmacbeth@comporium.net * Create Date: June 27, 2003 * Last Modified Date: */
using System; namespace Client.Chapter_2___Operators_and_Excpressions {
public class ShiftOperators { static void Main(string[] args) { uint a = 0; uint b = 0; a = 8 << 3; b = 32 >> 4; } }
}
</source>
Show bits
<source lang="csharp"> /* C# Programming Tips & Techniques by Charles Wright, Kris Jamsa Publisher: Osborne/McGraw-Hill (December 28, 2001) ISBN: 0072193794
- /
namespace nsBitwise {
using System; public class Bitwise123 { static public void Main () { ushort x = 15542; ushort y = 21845; Console.Write ("x = {0} = ", x); ShowBits (x); Console.Write ("\r\ny = {0} = ", y); ShowBits (y); ushort result = (ushort) (x & y); Console.Write ("\r\nx & y = "); ShowBits (result); Console.WriteLine (" = " + result); Console.Write ("\r\nx = {0} = ", x); ShowBits (x); Console.Write ("\r\ny = {0} = ", y); ShowBits (y); result = (ushort) (x | y); Console.Write ("\r\nx | y = "); ShowBits (result); Console.WriteLine (" = " + result); Console.Write ("\r\nx = {0} = ", x); ShowBits (x); Console.Write ("\r\ny = {0} = ", y); ShowBits (y); result = (ushort) (x ^ y); Console.Write ("\r\nx ^ y = "); ShowBits (result); Console.WriteLine (" = " + result); } static void ShowBits (ushort x) { int size; unsafe { size = sizeof (short) * 8; } for (int i = size - 1; i >= 0; --i) { Console.Write ((x >> i) & 1); if ((i % 4) == 0) Console.Write (" "); } } }
}
</source>
Use bitwise AND to determine if a number is odd
<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852
- /
// Use bitwise AND to determine if a number is odd. using System;
public class IsOdd {
public static void Main() { ushort num; num = 10; if((num & 1) == 1) Console.WriteLine("This won"t display."); num = 11; if((num & 1) == 1) Console.WriteLine(num + " is odd."); }
}
</source>
Use bitwise AND to make a number even
<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852
- /
// Use bitwise AND to make a number even. using System;
public class MakeEven {
public static void Main() { ushort num; ushort i; for(i = 1; i <= 10; i++) { num = i; Console.WriteLine("num: " + num); num = (ushort) (num & 0xFFFE); // num & 1111 1110 Console.WriteLine("num after turning off bit zero: " + num + "\n"); } }
}
</source>
Use bitwise OR to make a number odd
<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852
- /
// Use bitwise OR to make a number odd. using System;
public class MakeOdd {
public static void Main() { ushort num; ushort i; for(i = 1; i <= 10; i++) { num = i; Console.WriteLine("num: " + num); num = (ushort) (num | 1); // num | 0000 0001 Console.WriteLine("num after turning on bit zero: " + num + "\n"); } }
}
</source>
Use the shift operators to multiply and divide by 2
<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852
- /
// Use the shift operators to multiply and divide by 2. using System;
public class MultDiv {
public static void Main() { int n; n = 10; Console.WriteLine("Value of n: " + n); // multiply by 2 n = n << 1; Console.WriteLine("Value of n after n = n * 2: " + n); // multiply by 4 n = n << 2; Console.WriteLine("Value of n after n = n * 4: " + n); // divide by 2 n = n >> 1; Console.WriteLine("Value of n after n = n / 2: " + n); // divide by 4 n = n >> 2; Console.WriteLine("Value of n after n = n / 4: " + n); Console.WriteLine(); // reset n n = 10; Console.WriteLine("Value of n: " + n); // multiply by 2, 30 times n = n << 30; // data is lost Console.WriteLine("Value of n after left-shifting 30 places: " + n); }
}
</source>
Use XOR to encode and decode a message
<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852
- /
// Use XOR to encode and decode a message.
using System;
public class Encode {
public static void Main() { char ch1 = "H"; char ch2 = "i"; char ch3 = "!"; int key = 88; Console.WriteLine("Original message: " + ch1 + ch2 + ch3); // encode the message ch1 = (char) (ch1 ^ key); ch2 = (char) (ch2 ^ key); ch3 = (char) (ch3 ^ key); Console.WriteLine("Encoded message: " + ch1 + ch2 + ch3); // decode the message ch1 = (char) (ch1 ^ key); ch2 = (char) (ch2 ^ key); ch3 = (char) (ch3 ^ key); Console.WriteLine("Decoded message: " + ch1 + ch2 + ch3); }
}
</source>