Cái vòng lặp này nó có vô hạn đâu mà sao nó chạy hoài vậy?

cái vòng lặp này nó có vô hạn đâu mà sao nó chạy hoài vậy mn?

char là từ -127>127, unsigned char mới là từ 0>255

1 Like

cái này là do range của biến ch.
do bạn để là char thôi nên nó default nó hiểu là signed char. range từ -127 đến 128.
Nên khi bạn tăng đến 128 nó lại quay về -127. (bạn có thể search vào tròn biến để hiểu)
do đó bạn không bao giờ tiến đến 255 được. vòng vô hạn

#include
using namespace std;
int main() {
unsigned char ch;
for (ch = 0; ch <= 255; ch++) {
cout << ch << endl;
}
system(“pause”);
}

// như thế này nó cũng chạy vô hạn là sao nhỉ

ch làm sao vượt quá 255, có 8 bit thôi.

1 Like

chỗ đó mình cho nhỏ hơn 255 mà

char: -128 -> 127 anh ạ !

mình để kiểu unsigned char nó vẫn ra vòng lặp vô hạn bạn ạ!

sửa lại tham khảo nha anh: for(int idx = -128; idx <= 127; idx++){

cout<<’ ‘<<char(idx)<<’ ';
}

em nghĩ biến kiểu char có kích thước 1 byte = 8 bits nên phạm vi giá trị biến có thể lưu trữ: -2^(8 - 1) -> 2^(8 - 1) - 1 <=> -128 -> 127 :slight_smile:

                                       dùng dấu ' ' vẫn được sao ta ,

được mà anh nó chỉ là kí tự khoảng trắng thôi ạ :v

kí tự khoảng trắng thì phải dùng " " chứ nhỉ :slight_smile:

anh phải phân biệt được kí tự với chuỗi kí tự: 1 ký tự được đặt trong 2 dấu nháy đơn được lưu trữ trong máy tính là 1 con số còn chuỗi kí tự thì khác: nó là mảng 1 chiều bao gồm 2 kí tự 1 kí tự khoảng trắng và 1 kí tự kết thúc chuỗi (’\0’) . ở đây anh dùng cách nào cũng được nhưng cần phân biệt được thôi ạ :slight_smile:

1 Like

còn về tại sao mà nó lặp vô hạn vì trong bảng mã ASCII chuẩn chỉ có 128 (0 -> 127) kí tự mà phạm vi của biến kiểu unsigned char: (0 -> 255) cho nên biến điều khiển vòng lặp chạy đến 127 nó lại chạy quay lại 0 và cứ như vậy thì nó cứ lặp mãi thôi anh ạ :slight_smile:


bảng trong link này sao nó chạy từ 0=>255 nhỉ

xài link chuẩn anh ơi ? https://vi.wikipedia.org/wiki/ASCII

biến ch chạy đến 255, rồi +1 = 0, nên ko có điều kiện dừng => lặp vô hạn !

1 Like

Thấy mọi người giải thích nhưng không chính xác gì cả.
Thứ nhất kiểu unsigned char thường là kiểu số nguyên 8 bit, giá trị từ 0-255. Khi thực hiện cộng thêm 1 cho giá trị max (255) thì xảy ra hiện tượng tràn số. Giá trị lúc này qua về 0 dẫn tới vòng lặp vô hạn.

Em nên tìm hiểu về cách xử lý dữ liệu của máy tính, cụ thể sẽ ở các môn học kiến trúc máy tính, lập trình vi xử lý thì sẽ rõ
Tại sao ngta phân biệt bộ vi xử lý 8bit, 16bit, 32bit, 64bit

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?