Integral data types in C#

Integral data types in C# are types that represent whole numbers (i.e., numbers without fractional parts). In C#, these types are:

  • sbyte: Represents an 8-bit signed integer.
  • byte: Represents an 8-bit unsigned integer.
  • short: Represents a 16-bit signed integer.
  • ushort: Represents a 16-bit unsigned integer.
  • int: Represents a 32-bit signed integer.
  • uint: Represents a 32-bit unsigned integer.
  • long: Represents a 64-bit signed integer.
  • ulong: Represents a 64-bit unsigned integer.

1. sbyte

The sbyte data type in C# is a signed 8-bit integer, which means it can store values from -128 to 127. It proves beneficial when dealing with small integer values and aiming to conserve memory. Given that sbyte occupies less memory compared to larger integer types such as int, it can offer efficiency in situations where minimizing memory usage is a priority.

Here's a simple example to illustrate how to use the sbyte data type in C#:


using System;

class Program
{
    static void Main()
    {
        sbyte positiveNumber = 100; // A positive sbyte value
        sbyte negativeNumber = -100; // A negative sbyte value

        Console.WriteLine("Positive Number: " + positiveNumber);
        Console.WriteLine("Negative Number: " + negativeNumber);

        // Demonstrating arithmetic operation
        sbyte sum = (sbyte)(positiveNumber + negativeNumber);
        Console.WriteLine("Sum: " + sum);
    }
}

In this code:

  1. We declare two sbyte variables, positiveNumber and negativeNumber, and assign them values within the range of an sbyte.
  2. We print these values to the console.
  3. We perform an arithmetic operation (addition) on these two variables and store the result in another sbyte variable, sum.
  4. We then print the sum to the console.

When you run this code, the output will be::


Positive Number: 100
Negative Number: -100
Sum: 0

This example shows how sbyte can be used for basic operations and gives an idea of its range and capabilities in C#. Don't forget to change the result of math calculations back to sbyte. In C#, when you do math with sbyte, it usually becomes an int, so you need to change it back if you want to keep it as an sbyte.

2. byte

The byte data type in C# is an unsigned 8-bit integer, meaning it can hold values from 0 to 255. It is often used for handling small numerical values, especially when dealing with raw data from streams, files, or image processing, where memory efficiency is crucial.

Here's a straightforward example to illustrate the use of the byte data type in C#:


using System;

class Program
{
    static void Main()
    {
        byte number1 = 100; // A byte value
        byte number2 = 200; // Another byte value

        Console.WriteLine("Number 1: " + number1);
        Console.WriteLine("Number 2: " + number2);

        // Demonstrating arithmetic operation
        // Note the casting to prevent overflow errors
        byte sum = (byte)(number1 + number2);
        Console.WriteLine("Sum (with casting): " + sum);
    }
}

In this example:

  1. We define two byte variables, number1 and number2, and assign them values within the byte range.
  2. These values are printed to the console.
  3. We then perform an addition operation on these variables. Remember that we change the result to a byte because when we add two byte numbers, the total could be higher than the biggest byte value, which is 255. Without casting, an overflow error could occur.

Output

When you run this code, the output will be:


Number 1: 100
Number 2: 200
Sum (with casting): 44

In this case, the sum (300) exceeds the maximum value a byte can hold (255), so it wraps around due to overflow, resulting in 44 (300 - 256). This behavior is something to be cautious about when dealing with byte arithmetic in C#.

3. short

In C#, a short is a kind of number that can store values from -32,768 to 32,767. It's a 16-bit integer that can be positive or negative. This makes it suitable for scenarios where you need to store numerical values larger than what byte or sbyte can hold, but smaller than the range of an int. Using short can be beneficial for memory efficiency, especially in large arrays or when working with systems with limited resources.

Let's illustrate the use of short with a simple C# example:


using System;

class Program
{
    static void Main()
    {
        short smallNumber = 12345; // A typical short value
        short largeNumber = -12345; // Another short value, but negative

        Console.WriteLine("Small Number: " + smallNumber);
        Console.WriteLine("Large Number: " + largeNumber);

        // Demonstrating arithmetic operation
        short sum = (short)(smallNumber + largeNumber);
        Console.WriteLine("Sum of the Numbers: " + sum);
    }
}
	

In this example:

  1. We declare two short variables, smallNumber and largeNumber, and assign them typical short range values.
  2. After that, we display these numbers on the screen.
  3. We perform a basic arithmetic operation (addition) on these two variables and store the result in a short variable named sum.
  4. The sum is printed to the console.

Output

When you run this code, the output will look like this:


Small Number: 12345
Large Number: -12345
Sum of the Numbers: 0

This example demonstrates how short is used in basic arithmetic operations and how it can handle both positive and negative values within its range. Remember that when you do math with short numbers in C#, it typically becomes int. So, you might need to change it back to short to avoid errors when compiling your code.

4. ushort

The ushort data type in C# is an unsigned 16-bit integer. This means it can store numerical values ranging from 0 to 65,535. Unlike its counterpart short, which can hold negative values, ushort is exclusively for positive numbers. It's useful in scenarios where you are certain that the values will not be negative, such as counting operations or working with certain types of raw data. Using ushort can also be a memory-efficient choice, especially when large arrays of numbers are involved.

Let's see a simple example to illustrate the use of ushort in C#:


using System;

class Program
{
    static void Main()
    {
        ushort number1 = 30000; // A typical ushort value
        ushort number2 = 35000; // Another ushort value

        Console.WriteLine("Number 1: " + number1);
        Console.WriteLine("Number 2: " + number2);

        // Demonstrating arithmetic operation
        ushort sum = (ushort)(number1 + number2);
        Console.WriteLine("Sum (with casting): " + sum);
    }
}

In this example:

  1. We declare two ushort variables, number1 and number2, and assign them values within the ushort range.
  2. These numbers are printed to the console.
  3. We perform an addition operation on these variables. Here, we cast the result to ushort to handle any potential overflow since the sum of the two numbers exceeds the maximum value that ushort can hold.

Output

When this code is executed, the output will be:


Number 1: 30000
Number 2: 35000
Sum (with casting): 65000

This example demonstrates how you can perform basic operations with ushort and the importance of being mindful of the value range and overflow. Remember, similar to other numeric types in C#, operations on ushort values are automatically converted to int, so casting back to ushort might be necessary, as shown in the example.

5. int

The int data type in C# is a fundamental type for storing integer values. It's a signed 32-bit integer, meaning it can store values ranging from -2,147,483,648 to 2,147,483,647. Due to its versatility and range, int is one of the most commonly used data types in C# for various numerical operations, including loops, counters, arithmetic operations, and more.

Let’s illustrate the use of the int data type with a simple C# example:


using System;

class Program
{
    static void Main()
    {
        int firstNumber = 50000;      // An int value
        int secondNumber = 100000;    // Another int value

        Console.WriteLine("First Number: " + firstNumber);
        Console.WriteLine("Second Number: " + secondNumber);

        // Demonstrating arithmetic operation
        int sum = firstNumber + secondNumber;
        Console.WriteLine("Sum of the Numbers: " + sum);
    }
}

In this code snippet:

  1. We declare two int variables, firstNumber and secondNumber, and assign them integer values.
  2. These values are then displayed on the console.
  3. We perform a basic arithmetic operation (addition) with these variables and store the result in another int variable named sum.
  4. At the end, the sum of numbers is printed on to the console window.

Output

When you run this program, the output will be:


First Number: 50000
Second Number: 100000
Sum of the Numbers: 150000

This example demonstrates basic usage of the int data type in C#. It shows how you can perform arithmetic operations and handle integer values within the range that int supports. In C#, int is the default type for integer numbers, making it a go-to data type for many programming scenarios.

6. uint

In C#, a uint is a type of number that is always positive and can hold values up to 4,294,967,295. It's a 32-bit integer. It differs from the int type in that it doesn't support negative numbers. The uint can store values ranging from 0 to 4,294,967,295. This data type is particularly useful in scenarios where you are sure that the values will always be non-negative, like in certain counting operations or when interacting with specific APIs or systems that require unsigned integers.

Let's look at an example to understand how uint works in C#:


using System;

class Program
{
    static void Main()
    {
        uint firstNumber = 2000000000;  // A uint value
        uint secondNumber = 2000000000; // Another uint value

        Console.WriteLine("First Number: " + firstNumber);
        Console.WriteLine("Second Number: " + secondNumber);

        // Demonstrating arithmetic operation
        uint sum = firstNumber + secondNumber;
        Console.WriteLine("Sum of the Numbers: " + sum);
    }
}
In this code snippet:
  1. We declare two uint variables, firstNumber and secondNumber, and assign them large positive integer values.
  2. These numbers are then printed to the console.
  3. We add these two numbers, which is a valid operation since both are uint and the sum does not exceed the maximum value of uint.
  4. The sum is then displayed on the console.

Output

When this code is executed, the output will be:


First Number: 2000000000
Second Number: 2000000000
Sum of the Numbers: 4000000000
 

This example shows how the uint type can be used for arithmetic operations while handling large positive integer values. It's important to note that using uint in environments where negative numbers might occur can lead to errors, so its use should be carefully considered based on the specific requirements of your application.

7. long

The long data type in C# is used to store large integer values. It is a signed 64-bit integer, which means it can hold values ranging from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807. This wide range makes it suitable for situations where very large numbers are involved, far beyond the capacity of int or short.

Here's a simple example to demonstrate the use of the long data type in C#:


using System;

class Program
{
    static void Main()
    {
        long largeNumber = 5000000000; // A large long value
        long anotherLargeNumber = -3000000000; // Another long value, but negative

        Console.WriteLine("Large Number: " + largeNumber);
        Console.WriteLine("Another Large Number: " + anotherLargeNumber);

        // Demonstrating arithmetic operation
        long sum = largeNumber + anotherLargeNumber;
        Console.WriteLine("Sum of the Numbers: " + sum);
    }
}

In this code snippet:

  1. We declare two long variables, largeNumber and anotherLargeNumber, and assign them large positive and negative values, respectively.
  2. For output purpose we show these numbers to the console windows.
  3. An arithmetic operation (addition) is performed on these variables, and the result is stored in another long variable named sum.
  4. Finally, we calculate the and print the sum to the console window.

When this program is executed, the output will be:


Large Number: 5000000000
Another Large Number: -3000000000
Sum of the Numbers: 2000000000

This example shows how the long data type can be used to handle very large numbers. It is particularly useful in applications that require a broader range of integer values than what is provided by int.

8. ulong

In C#, the ulong data type stands for "unsigned long," and it is used to store positive whole numbers (integers) that cannot be negative. Unlike the regular long data type, which can store both positive and negative numbers, ulong is limited to non-negative values.

Here's a complete source code example that illustrates the use of the ulong data type::


using System;

class Program
{
    static void Main()
    {
        // Declare and initialize a ulong variable
        ulong myUnsignedLong = 12345678901234567890UL;

        // Print the value to the console
        Console.WriteLine("Value of myUnsignedLong: " + myUnsignedLong);

        // Perform some arithmetic operations
        ulong result = myUnsignedLong + 1000UL;
        Console.WriteLine("Adding 1000: " + result);

        result = myUnsignedLong * 2UL;
        Console.WriteLine("Multiplying by 2: " + result);

        // Attempt to store a negative value (this will result in a compilation error)
        // ulong negativeValue = -12345; // Uncommenting this line will cause an error

        // Wait for user input to close the console window
        Console.WriteLine("Press any key to exit...");
        Console.ReadKey();
    }
}
Output:

Value of myUnsignedLong: 12345678901234567890
Adding 1000: 12345678901234568890
Multiplying by 2: 24691357802469135780
Press any key to exit...

In this example, we first declare and initialize a ulong variable called myUnsignedLong with a very large positive value. We then perform some arithmetic operations on it, demonstrating how ulong behaves. Attempting to store a negative value in a ulong variable will result in a compilation error, as shown in the commented line. Finally, we wait for user input to close the console window.

The ulong data type is commonly used when you need to store positive integer values within the range of 0 to approximately 18.4 quintillion. It is often used in scenarios where you want to ensure that the stored values are always positive and don't require a sign bit.