01/10/2018, 09:01

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?

Quang Minh viết 11:08 ngày 01/10/2018

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

lê đức huy viết 11:02 ngày 01/10/2018

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

Vinh viết 11:15 ngày 01/10/2018

#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ỉ

rogp10 viết 11:14 ngày 01/10/2018

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

Vinh viết 11:03 ngày 01/10/2018

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

Nguyen Kien viết 11:09 ngày 01/10/2018

char: -128 -> 127 anh ạ !

Vinh viết 11:15 ngày 01/10/2018

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

Nguyen Kien viết 11:13 ngày 01/10/2018

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

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

Nguyen Kien viết 11:10 ngày 01/10/2018

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

Nguyen Kien viết 11:12 ngày 01/10/2018

Vinh viết 11:13 ngày 01/10/2018
                                       dùng dấu ' ' vẫn được sao ta ,
Nguyen Kien viết 11:07 ngày 01/10/2018

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

Vinh viết 11:14 ngày 01/10/2018

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

Nguyen Kien viết 11:07 ngày 01/10/2018

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 ạ

Nguyen Kien viết 11:16 ngày 01/10/2018

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 ạ

Vinh viết 11:02 ngày 01/10/2018

cunglaptrinh.blogspot.com

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ỉ

Nguyen Kien viết 11:11 ngày 01/10/2018

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

James viết 11:15 ngày 01/10/2018

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 !

PhamHai viết 11:13 ngày 01/10/2018

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

Bài liên quan
0