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
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 ạ
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
char
là từ -127>127,unsigned char
mới là từ 0>255cá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
đượ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 mã ASCII là gì?
Bảng mã ASCII mở rộng 255 ký tự (chuẩn ISO Latin-1)
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 !
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