Cái vòng lặp này nó có vô hạn đâu mà sao nó chạy hoài vậy?
char
là từ -127>127, unsigned char
mới là từ 0>255
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.
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
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ỉ
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 ạ
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 ạ
bảng trong link này sao nó chạy từ 0=>255 nhỉ
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 !
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