Số nguyên (Integer) là một khái niệm cơ bản trong toán học và lập trình, đóng vai trò quan trọng trong nhiều lĩnh vực như khoa học dữ liệu, trí tuệ nhân tạo, thuật toán. Vậy số nguyên là gì? Nó khác gì với số thực hay số hữu tỷ? Trong bài viết này, chúng ta sẽ tìm hiểu chi tiết về số nguyên, từ định nghĩa, phân loại đến cách sử dụng và ứng dụng thực tế.
Số nguyên (Integer) là gì?
Số nguyên (Integer) là tập hợp các số bao gồm tất cả số nguyên dương (1, 2, 3,…), số nguyên âm (-1, -2, -3,…) và số 0. Đây là những số không có phần thập phân hay phần phân số. Số nguyên là một khái niệm nền tảng trong Toán học.
Tập hợp các số nguyên thường được ký hiệu là Z. Như vậy, Z bao gồm các số như …, -3, -2, -1, 0, 1, 2, 3, … kéo dài vô hạn về cả hai phía dương và âm. Nó chứa toàn bộ số tự nhiên (thường là 0, 1, 2,…) và các số đối của chúng.
Đặc điểm quan trọng nhất để nhận biết số nguyên là chúng không có phần lẻ sau dấu phẩy. Ví dụ, các số 5, -17, và 0 đều là số nguyên. Ngược lại, các số như 3.14, -0.5, hay 1/2 không phải là số nguyên vì chúng có phần thập phân hoặc là phân số.
Hiểu rõ số nguyên là gì rất quan trọng, không chỉ trong số học mà còn là nền tảng cho lập trình. Trong các ngôn ngữ lập trình như C++, Java, Python, số nguyên được biểu diễn bằng các kiểu dữ liệu như int
hay long
để lưu trữ các giá trị đếm được hoặc chỉ số không có phần lẻ.

Phân loại số nguyên
Số nguyên có thể được phân loại theo nhiều cách khác nhau tùy thuộc vào tính chất hoặc ngữ cảnh sử dụng, đặc biệt là trong Toán học và Lập trình. Việc phân loại giúp chúng ta hiểu rõ hơn về đặc điểm và ứng dụng của từng nhóm số nguyên cụ thể.
1. Số nguyên dương, số nguyên âm và số 0
Cách phân loại cơ bản nhất chia số nguyên (Integer) thành ba nhóm dựa trên giá trị so với số 0. Phân loại này rất quan trọng để xác định dấu và thứ tự trên trục số.
Số nguyên dương là các số nguyên lớn hơn 0. Chúng nằm ở bên phải số 0 trên trục số. Ví dụ các số nguyên dương bao gồm 1, 2, 3, 100, 579,… Tập hợp số nguyên dương thường được ký hiệu là Z⁺.
Số nguyên âm là các số nguyên nhỏ hơn 0. Chúng nằm ở bên trái số 0 trên trục số và luôn có dấu trừ (-) đứng trước. Ví dụ về số nguyên âm là -1, -2, -3, -50, -1000,… Tập hợp số nguyên âm thường được ký hiệu là Z⁻.
Số 0 là một số nguyên đặc biệt, nó không phải là số nguyên dương cũng không phải là số nguyên âm. Số 0 đóng vai trò là gốc trên trục số, phân chia giữa vùng số âm và số dương.
Trong lập trình, khái niệm “số nguyên không dấu” (unsigned integer) cũng thường được đề cập. Đây là các số nguyên chỉ bao gồm số 0 và các số nguyên dương, dùng khi giá trị không bao giờ âm, giúp mở rộng giới hạn lưu trữ cho các số dương.
2. Số nguyên tố và hợp số
Phân loại này dựa trên số lượng ước số dương của một số nguyên (lớn hơn 1). Số nguyên tố (Prime number) là số nguyên lớn hơn 1 và chỉ có đúng hai ước số dương là 1 và chính nó. Ví dụ: 2, 3, 5, 7, 11, 13,… là các số nguyên tố.
Hợp số (Composite number) là số nguyên lớn hơn 1 nhưng có nhiều hơn hai ước số dương. Nói cách khác, hợp số có thể được phân tích thành tích của các số nguyên tố nhỏ hơn. Ví dụ: 4 (vì 4=2×2), 6 (vì 6=2×3), 8, 9, 10,… là các hợp số.
Lưu ý rằng số 0 và số 1 không được coi là số nguyên tố cũng không phải là hợp số. Thông thường, khái niệm số nguyên tố và hợp số chỉ áp dụng cho các số nguyên dương lớn hơn 1. Số 2 là số nguyên tố chẵn duy nhất.
3. Các kiểu dữ liệu số nguyên trong lập trình
Trong lập trình máy tính, số nguyên (Integer) được lưu trữ bằng các kiểu dữ liệu (data type) khác nhau. Việc có nhiều kiểu dữ liệu số nguyên giúp tối ưu hóa việc sử dụng bộ nhớ (memory) và xác định miền giá trị (range) phù hợp cho biến số.
Kiểu dữ liệu int
là kiểu số nguyên phổ biến nhất trong nhiều ngôn ngữ như C, C++, Java. Nó thường dùng để lưu các giá trị đếm, chỉ số mảng,… Kích thước phổ biến của int
là 32 bit, cho phép lưu giá trị từ -2,147,483,648 đến 2,147,483,647.
Bên cạnh int
, còn có các kiểu như short
(thường 16 bit, miền giá trị nhỏ hơn) và long
hoặc long long
(thường 64 bit, miền giá trị lớn hơn). Kiểu byte
(thường 8 bit) dùng cho các giá trị rất nhỏ. Việc chọn kiểu dữ liệu phụ thuộc vào nhu cầu lưu trữ của ứng dụng.
Ngoài ra, hầu hết các ngôn ngữ còn cung cấp các phiên bản “không dấu” (ví dụ unsigned int
). Kiểu này chỉ lưu trữ số 0 và số nguyên dương, cho phép biểu diễn giá trị dương lớn gấp đôi so với kiểu “có dấu” cùng kích thước, hữu ích khi biết chắc giá trị không bao giờ âm.
Ứng dụng của số nguyên
Số nguyên, dù là khái niệm cơ bản, lại có vô vàn ứng dụng thiết thực và quan trọng trong nhiều lĩnh vực từ Toán học, Lập trình máy tính, khoa học, kỹ thuật cho đến đời sống hàng ngày. Chúng là nền tảng cho nhiều hệ thống và quy trình phức tạp hơn.
1. Ứng dụng trong toán học
Trong Toán học, số nguyên là cốt lõi của nhiều nhánh quan trọng như Số học, Đại số, và Lý thuyết số. Chúng không chỉ dùng cho các phép tính cơ bản mà còn là cơ sở để xây dựng các tập hợp số phức tạp hơn như số hữu tỉ và số thực.
Ứng dụng quen thuộc nhất của số nguyên trong toán là đếm và biểu thị thứ tự. Chúng ta dùng số nguyên để xác định số lượng phần tử (ví dụ: 3 quả táo), số thứ tự (ví dụ: học sinh thứ 5), hay các bước trong một thuật toán hoặc quy trình.
Số nguyên âm và dương còn giúp mô tả các đại lượng có hướng hoặc giá trị tương đối. Ví dụ, nhiệt độ dưới 0°C được biểu thị bằng số âm (-5°C), độ sâu dưới mực nước biển, hay thể hiện các khoản nợ và có trong kế toán, tài chính.
2. Ứng dụng trong lập trình
Số nguyên là một trong những kiểu dữ liệu (data type) nền tảng và được sử dụng nhiều nhất trong lập trình. Hầu hết mọi ngôn ngữ lập trình (C, C++, Java, Python,…) đều cung cấp các kiểu số nguyên (int
, long
, short
, byte
) để xử lý hiệu quả các giá trị không có phần thập phân.
Chúng rất hữu ích trong việc đếm số lần lặp trong vòng lặp (for
, while
), lưu trữ số lượng (ví dụ: so_luong = 100
), ID định danh duy nhất (user ID, product ID), hay các trạng thái rời rạc trong chương trình máy tính.
Một vai trò cực kỳ quan trọng khác là làm chỉ số (index) cho mảng (array) hoặc danh sách (list). Vì các chỉ số này luôn là các số nguyên không âm (thường bắt đầu từ 0), chúng cho phép truy cập chính xác và nhanh chóng đến từng phần tử dữ liệu, ví dụ: myArray[0]
, customerList[3]
.
Ngoài ra, số nguyên còn được dùng trong các phép toán xử lý bit (bit manipulation) để tối ưu hiệu năng hoặc kiểm soát phần cứng, biểu diễn cờ trạng thái (flags), hay thậm chí là địa chỉ bộ nhớ trong lập trình hệ thống cấp thấp.
3. Số nguyên trong khoa học dữ liệu và ai
Trong Khoa học dữ liệu (Data Science) và Trí tuệ nhân tạo (AI), số nguyên đóng vai trò thiết yếu để biểu diễn dữ liệu rời rạc, tần suất, và các tham số trong mô hình. Chúng xuất hiện trong rất nhiều thuật toán và quy trình xử lý dữ liệu.
Số nguyên thường được sử dụng để thể hiện các số đếm hoặc tần suất trong tập dữ liệu, ví dụ như số lượt truy cập một trang web, số lượng sản phẩm đã bán, hay số lần một từ xuất hiện trong văn bản (term frequency). Đây là thông tin đầu vào quan trọng cho phân tích thống kê.
Kỹ thuật mã hóa (encoding) dữ liệu dạng danh mục (categorical features) thường chuyển đổi các nhãn chữ thành số nguyên. Ví dụ, mã hóa “Chó” thành 0, “Mèo” thành 1, “Chim” thành 2 để các mô hình học máy (machine learning models) có thể hiểu và xử lý được.
Trong lĩnh vực xử lý ảnh (một phần của AI), giá trị cường độ của mỗi pixel thường được lưu trữ dưới dạng số nguyên. Ví dụ, ảnh xám 8-bit dùng số nguyên từ 0 (đen) đến 255 (trắng), ảnh màu RGB dùng ba số nguyên trong khoảng này cho mỗi kênh màu Đỏ, Lục, Lam.
Cách sử dụng số nguyên trong lập trình
Để sử dụng số nguyên (Integer) hiệu quả trong lập trình, bạn cần hiểu cách khai báo chúng bằng các kiểu dữ liệu phù hợp trong ngôn ngữ bạn dùng và cách thực hiện các phép toán số học cơ bản. Đây là những kỹ năng nền tảng cho mọi lập trình viên.
1. Kiểu dữ liệu integer trong Python, C++, Java
Mỗi ngôn ngữ lập trình có cách riêng để định nghĩa và xử lý kiểu dữ liệu số nguyên. Python, C++, và Java là ba ngôn ngữ phổ biến với những đặc thù riêng trong việc quản lý integer.
Trong Python, kiểu int
cực kỳ linh hoạt. Nó có thể tự động biểu diễn các số nguyên với độ chính xác tùy ý, chỉ bị giới hạn bởi bộ nhớ hệ thống. Bạn không cần phải bận tâm về việc chọn short
, long
hay lo lắng tràn số (overflow). Ví dụ khai báo: my_age = 30
.
C++ cung cấp các kiểu số nguyên với kích thước cố định giúp kiểm soát bộ nhớ và hiệu năng chặt chẽ hơn: short
(thường 16 bit), int
(thường 32 bit), long
(thường 32 hoặc 64 bit), long long
(thường 64 bit). Cần chọn kiểu phù hợp miền giá trị. Ví dụ: int item_count = 500;
. C++ cũng hỗ trợ các biến thể unsigned
(không dấu).
Java cũng sử dụng các kiểu kích thước cố định: byte
(8 bit), short
(16 bit), int
(32 bit), long
(64 bit). Khi khai báo giá trị kiểu long
, bạn nên thêm hậu tố L
. Java không có kiểu nguyên thủy unsigned
cho số nguyên (trừ char
). Ví dụ: long population = 7000000000L;
.
Phép toán với số nguyên
Các phép toán số học cơ bản được hỗ trợ đầy đủ cho số nguyên trong hầu hết các ngôn ngữ lập trình. Chúng bao gồm cộng, trừ, nhân, chia nguyên và phép chia lấy phần dư (modulo).
Phép cộng (+), Phép trừ (-), và Phép nhân (*) hoạt động tương tự như trong toán học. Kết quả của việc cộng, trừ, hoặc nhân hai số nguyên luôn là một số nguyên. Ví dụ: 15 + 7
là 22
, 100 - 25
là 75
, 8 * 9
là 72
.
Phép chia nguyên (/) có sự khác biệt giữa các ngôn ngữ. Trong C++ và Java, phép chia hai số nguyên sẽ loại bỏ phần thập phân, ví dụ 9 / 4
bằng 2
. Trong Python 3, toán tử /
thực hiện phép chia thực (9 / 4
bằng 2.25
), còn toán tử //
mới thực hiện phép chia nguyên (9 // 4
bằng 2
).
Phép chia lấy dư (%), còn gọi là phép toán modulo, trả về phần dư của phép chia nguyên. Ví dụ: 9 % 4
bằng 1
(vì 9 chia 4 được 2 dư 1), 10 % 2
bằng 0
(vì 10 chia hết cho 2). Phép toán này rất hữu ích trong nhiều thuật toán.
Ví dụ code minh họa
Dưới đây là các đoạn code ví dụ đơn giản minh họa cách khai báo biến nguyên và thực hiện các phép toán cơ bản trong Python, C++, và Java.
Python:
# Khai báo biến nguyên trong Python
so_luong = 15
gia_moi_don_vi = 100
# Phép toán
tong_gia_tri = so_luong * gia_moi_don_vi
so_luong_moi = so_luong + 5
chia_nguyen = so_luong // 2 # Phép chia nguyên
phan_du = so_luong % 2 # Phép chia lấy dư
print(f"Tổng giá trị: {tong_gia_tri}")
print(f"Số lượng mới: {so_luong_moi}")
print(f"Chia nguyên (15 // 2): {chia_nguyen}, Phần dư (15 % 2): {phan_du}")
Đoạn code Python này khai báo hai biến int
, thực hiện phép nhân, cộng, chia nguyên (//
), chia lấy dư (%
) và in kết quả ra màn hình sử dụng f-string.
C++:
#include <iostream>
int main() {
// Khai báo biến nguyên trong C++
int so_luong = 15;
int gia_moi_don_vi = 100;
// Phép toán
int tong_gia_tri = so_luong * gia_moi_don_vi;
int so_luong_moi = so_luong + 5;
int chia_nguyen = so_luong / 2; // Phép chia nguyên trong C++
int phan_du = so_luong % 2; // Phép chia lấy dư
std::cout << "Tong gia tri: " << tong_gia_tri << std::endl;
std::cout << "So luong moi: " << so_luong_moi << std::endl;
std::cout << "Chia nguyen (15 / 2): " << chia_nguyen << ", Phan du (15 % 2): " << phan_du << std::endl;
return 0;
}
Code C++ tương tự, khai báo biến int
, thực hiện các phép toán. Lưu ý phép chia /
giữa hai số nguyên trong C++ mặc định là phép chia nguyên. Kết quả được in bằng std::cout
.
Java:
public class IntegerOperations {
public static void main(String[] args) {
// Khai báo biến nguyên trong Java
int soLuong = 15;
int giaMoiDonVi = 100;
// Phép toán
int tongGiaTri = soLuong * giaMoiDonVi;
int soLuongMoi = soLuong + 5;
int chiaNguyen = soLuong / 2; // Phép chia nguyên trong Java
int phanDu = soLuong % 2; // Phép chia lấy dư
System.out.println("Tong gia tri: " + tongGiaTri);
System.out.println("So luong moi: " + soLuongMoi);
System.out.println("Chia nguyen (15 / 2): " + chiaNguyen + ", Phan du (15 % 2): " + phanDu);
}
}
Code Java cũng khai báo biến int
trong hàm main
. Các phép toán tương tự C++, phép chia /
giữa hai số nguyên là phép chia nguyên. Kết quả được in bằng System.out.println()
.
So sánh số nguyên với số thực và số hữu tỉ
Mặc dù đều là các loại số trong Toán học và có mối liên hệ với nhau, Số nguyên (Integer), Số hữu tỉ (Rational Number) và Số thực (Real Number) có những định nghĩa và đặc điểm riêng biệt. Bảng so sánh dưới đây sẽ giúp bạn phân biệt rõ ràng ba tập hợp số này.
Tiêu chí | Số Nguyên (Integer) | Số Hữu Tỉ (Rational Number) | Số Thực (Real Number) |
---|---|---|---|
Định nghĩa | Là các số nguyên vẹn, bao gồm số nguyên dương (1, 2,…), số nguyên âm (-1, -2,…) và số 0. | Là các số có thể biểu diễn dưới dạng phân số a/b, trong đó a và b là các số nguyên và b khác 0. | Là tất cả các số có thể biểu diễn trên trục số, bao gồm cả số hữu tỉ và số vô tỉ (không thể viết dạng a/b). |
Ký hiệu tập hợp | Z | Q | R |
Đặc điểm chính | Không có phần thập phân hoặc phân số. | Có thể là số nguyên, số thập phân hữu hạn, hoặc số thập phân vô hạn tuần hoàn. | Có thể là số nguyên, thập phân hữu hạn, thập phân vô hạn tuần hoàn, hoặc số thập phân vô hạn không tuần hoàn (số vô tỉ). |
Dạng biểu diễn | …, -2, -1, 0, 1, 2, … | a/b (với a, b ∈ Z, b ≠ 0) | Mọi điểm trên trục số. |
Ví dụ | -3, 0, 7, 100 | -3, 0, 7, 1/2, -5/4, 0.25, 1.333… (1 và 1/3) | -3, 0, 7, 1/2, 0.25, 1.333…, √2 (khoảng 1.414…), π (khoảng 3.14159…) |
Quan hệ tập hợp | Z ⊂ Q ⊂ R (Mọi số nguyên đều là số hữu tỉ, và mọi số hữu tỉ đều là số thực). | Q ⊂ R (Mọi số hữu tỉ đều là số thực, nhưng không phải mọi số thực đều là số hữu tỉ). | R là tập hợp số lớn nhất trong ba tập hợp này, bao gồm cả Q và Z. |
Sử dụng trong LP | Rất phổ biến (int , long …). Dùng để đếm, lập chỉ mục, biểu diễn đại lượng rời rạc. |
Ít phổ biến hơn dưới dạng kiểu dữ liệu riêng, thường được xử lý bằng số thực hoặc thư viện đặc biệt. | Rất phổ biến (float , double ). Dùng cho các phép đo, tính toán có độ chính xác cao, giá trị liên tục. |
Khi nào nên sử dụng số nguyên trong lập trình?
Bạn nên sử dụng số nguyên (Integer) trong lập trình khi cần biểu diễn các giá trị nguyên vẹn, không có phần thập phân. Chúng đặc biệt phù hợp cho việc đếm, làm chỉ số, lưu trữ ID, biểu diễn mã trạng thái, và khi hiệu năng hoặc bộ nhớ là yếu tố quan trọng.
Khi bạn cần làm việc với số lượng của những thứ không thể chia nhỏ, số nguyên là lựa chọn tự nhiên. Ví dụ: số học sinh trong lớp, số sản phẩm trong giỏ hàng, số lượt thích một bài viết. Những đại lượng này về bản chất là rời rạc và không có phần lẻ.
Số nguyên là bắt buộc khi bạn cần truy cập các phần tử trong cấu trúc dữ liệu như mảng (array), danh sách (list), hoặc chuỗi (string) thông qua chỉ số (index). Chỉ số của các phần tử này luôn là các số nguyên không âm, thường bắt đầu từ 0 (ví dụ: myArray[0]
, userList[5]
).
Các mã định danh (ID) duy nhất như ID người dùng, ID đơn hàng, ID sản phẩm thường được biểu diễn bằng số nguyên (hoặc số nguyên lớn – long
). Việc sử dụng số nguyên giúp dễ dàng quản lý, tìm kiếm và tham chiếu đến các đối tượng hoặc bản ghi cụ thể trong hệ thống.
Số nguyên cũng rất hữu ích để biểu diễn các mã trạng thái (status codes) hoặc các cờ (flags) bật/tắt. Ví dụ, mã lỗi HTTP (như 404, 500) là số nguyên. Bạn cũng có thể dùng số nguyên kết hợp với phép toán bit để lưu nhiều trạng thái boolean trong một biến duy nhất.
Cuối cùng, hãy cân nhắc sử dụng số nguyên khi hiệu năng và tiết kiệm bộ nhớ là ưu tiên. Các phép toán số học trên số nguyên thường được CPU xử lý nhanh hơn so với số thực (float
, double
). Kiểu dữ liệu nguyên cũng thường chiếm ít dung lượng bộ nhớ hơn.
Ngược lại, nếu bạn cần biểu diễn các giá trị có phần thập phân, các phép đo lường cần độ chính xác cao (như chiều cao, cân nặng, tính toán tài chính có số lẻ, phần trăm), thì bạn nên sử dụng các kiểu số thực (float
hoặc double
).
Hiểu rõ về số nguyên là nền tảng trong lập trình. Khi bạn áp dụng kiến thức này để xây dựng website hay ứng dụng đầu tiên, việc chọn nơi lưu trữ ổn định rất quan trọng. Bạn có thể tham khảo dịch vụ Web Hosting giá rẻ uy tín tốc độ cao tại InterData, vận hành trên phần cứng chuyên dụng thế hệ mới cho sự ổn định và tốc độ cao.
Dự án cần nhiều tài nguyên hơn? Hãy xem xét dịch vụ VPS giá rẻ chất lượng cao với công nghệ ảo hóa tiên tiến và bộ xử lý AMD EPYC Gen 3th. Yêu cầu cấu hình mạnh và dung lượng được tối ưu hơn nữa? Dịch vụ Cloud Server giá rẻ cấu hình cao dùng SSD NVMe U.2, băng thông cao là giải pháp cao cấp, chất lượng.