Hi, Phòng khách!
Trang chủ
Đăng nhập
Công Cụ Tìm Kiếm

Lần hoạt động

| |
Tìm kiếm

  Trường Bit trong C

Bài viết được duyệt bởi PuaruVN
Đăng ngày :22.05.2016 / 21:33[TOP]
Xampp
Xampp
Active Member
Giả sử chương trình C của bạn bao gồm một số lượng biến TRUE/FALSE được nhóm trong một cấu trúc gọi là trangthai để kiểm tra xem hàng hóa sản xuất ra có đủ chiều rộng, chiều cao cho phép không, như sau:

Mã Code Vina4u
struct
{
unsignedint chieurong;
unsignedint chieucao;
} trangthai;

Cấu trúc này yêu cầu 8 bytes bộ nhớ nhưng thực tế nó dự trữ 0 hoặc 1 byte mỗi biến. Ngôn ngữ lập trình C có một cách tối ưu bộ nhớ trong trường hợp này. Bạn đang sử dụng các biến bên trong cấu trúc sau đó bạn có thể định nghĩa độ lớn các biến, nó sẽ thông báo cho trình biên dịch C việc chỉ sử dụng số lượng byte này. Ví dụ, cấu trúc bên trên có thể được viết lại như sau:

Mã Code Vina4u
struct
{
unsignedint chieurong :1;
unsignedint chieucao :1;
} trangthai;

Bây giờ cấu trúc trên sẽ yêu cầu 4 byte cho bộ nhớ cho biến trangthai nhưng chỉ 2 bit được sử dụng để lưu trữ giá trị. Bạn phải sử dụng đến 32 biến với độ dài 1 bit này, do đó cấu trúc này sẽ sử dụng 4 byte và khi bạn có 33 biến, nó sẽ cấp phát ví trị tiếp theo trong bộ nhớ và bắt đầu sử dụng 8 byte. Bây giờ chúng ta hãy kiểm tra ví dụ dưới đây để hiểu về định nghĩa này.

Mã Code Vina4u
#include<stdio.h>
#include<string.h>

/* dinh nghia mot cau truc don gian */
struct
{
unsignedint chieurong;
unsignedint chieucao;
} trangthai1;

/* dinh nghia mot cau truc voi cac truong bit */
struct
{
unsignedint chieurong :1;
unsignedint chieucao :1;
} trangthai2;

int main()
{
printf("Bo nho bi chiem giu boi trangthai1 la: %d\n",sizeof(trangthai1));
printf("Bo nho bi chiem giu boi trangthai2 la: %d\n",sizeof(trangthai2));

printf("\n===========================\n");
printf("VietJack chuc cac ban hoc tot! \n");

return0;
}

Biên dịch và chạy chương trình C trên sẽ cho kết quả:



Khai báo Trường Bit trong C
Khai báo một Trường Bit bên trong một cấu trúc có mẫu như sau:

Mã Code Vina4u
struct
{
kieu_du_lieu [ten_thanh_vien]: do_rong ;
};

Dưới đây là mô tả cho các phần tử biến trong một Trường Bit:

Phần tử Miêu tả
kieu_du_lieu Một kiểu integer có thể xác định cách Trường Bit được thông dịch. Kiểu này có thể là int, signed int, unsigned int
ten_thanh_vien Tên của Trường Bit.
do_rong (là độ rộng) Số lượng bit có trong một trường. Độ dài phải nhỏ hơn hoặc bằng độ dài Trường Bit của một đối tượng cụ thể.
Một biến được định nghĩa với giá trị độ lớn được cho sẵn được gọi là Trường Bit. Một Trường Bit có thể lưu trữ nhiều hơn một bit đơn ví dụ bạn cần một biến để lưu trữ các giá trị từ 0 đến 7, sau đó bạn có thể định nghĩa Trường Bit với độ dài tối đa là 3 bit như sau:

Mã Code Vina4u
struct
{
unsignedint tuoi ;
}Tuoi;

Việc định nghĩa trên sẽ hướng dẫn trình biên dịch C là biến sẽ sử dụng 3 bit để dự trữ các giá trị, nếu bạn sử dụng nhiều hơn 3 bit nó sẽ không cho phép bạn làm thế. Bây giờ hãy thử ví dụ dưới đây:

Mã Code Vina4u
#include<stdio.h>
#include<string.h>

struct
{
unsignedint tuoi ;
}Tuoi;

int main()
{
Tuoi.tuoi =3;
printf("Bo nho bi chiem giu boi Tuoi la Sizeof( Tuoi ) = %d\n",sizeof(Tuoi));
printf("Tuoi.tuoi : %d\n",Tuoi.tuoi );

Tuoi.tuoi =6;
printf("Tuoi.tuoi : %d\n",Tuoi.tuoi );

Tuoi.tuoi =7;
printf("Tuoi.tuoi : %d\n",Tuoi.tuoi );

/* Bay gio chung ta thu in nhieu hon 3 bit */
printf("\n-----------------------\n");
Tuoi.tuoi =8;
printf("Tuoi.tuoi : %d\n",Tuoi.tuoi );
Tuoi.tuoi =9;
printf("Tuoi.tuoi : %d\n",Tuoi.tuoi );

printf("\n===========================\n");
printf("VietJack chuc cac ban hoc tot! \n");

return0;
}

Biên dịch và chạy chương trình C trên sẽ cho kết quả:


Đăng ngày :22.05.2016 / 21:36 #1
EDM-Virusss
Viruss
Active Member
♥♥♥♥
[W.A.N.T.E.D]
@@ cái j v
Đăng ngày :22.05.2016 / 21:38 #2
Xampp
Xampp
Active Member
Vui lòng đăng nhập để thấy Links!
EDM-Virusss (22.05.2016 / 14)
@@ cái j v
lập trình C
Bình luận bài viết
Đăng Nhập để Bình luận và sử dụng đầy đủ tính năng Diễn Đàn
  Tổng số: 3 Bình luận

Chia sẻ bài viết
Đám Mây Từ Khóa
Bài Viết Cùng chuyên mục
Lọc theo tác giả
Xem chủ để ngoại tuyến (Offline)

Trong diễn đàn

Sắp xếp theo thứ tự từ trên xuống
BigTruyen.info - Kho Truyện Tranh Online Khổng lồ
Trang chủ