01/10/2018, 09:24

Giải thích giúp vẫn đề về biến trong bài tập C này ạ

Henry viết 11:27 ngày 01/10/2018

e cũng hóng giải thích

pham hong thai viết 11:25 ngày 01/10/2018

thật sự là giáo sư Lê Thị Ất viết sách khó hiểu thật

Hoàng Trung viết 11:33 ngày 01/10/2018

Miền giá trị của kiểu dữ liệu char là từ -128 đến 127, của unsigned char là từ 0 đến 255. Khi khai báo char ch1 = 200; nó sẽ vượt quá miền dữ liệu và sẽ quay ngược lại về -56 (bạn có thể dùng máy tính để tính hoặc tính tay ). Bạn nên tìm hiểu thêm trên google chẳng hạn nếu việc tìm hiểu trong sách gặp bế tắc

pham hong thai viết 11:38 ngày 01/10/2018

Cám ơn bạn nhiều

Hoàng Trung viết 11:39 ngày 01/10/2018

hehe, không có gì

pham hong thai viết 11:39 ngày 01/10/2018

à à cho e hỏi bác đang theo học gì vậy

Hoàng Trung viết 11:26 ngày 01/10/2018

tui chưa có phân chuyên ngành, vẫn đang học đại cương các kiểu thôi

pham hong thai viết 11:30 ngày 01/10/2018

Bạn ơi mình vẫn chưa hiểu lắm. kiểu char biểu diễn từ -128 đến 127 nghĩa là 256 kí tự nhưng biểu diễn số 200 tại sao lại bị -56 ?. mình biết là 256-200=56 mà tại sao? bạn thông não giùm mình đi

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

Cách ở trên khá là ad-hoc nhưng vẫn dễ hiểu hơn.

Làm bài bản thì công thức bù 2 là -x := NOT x + 1 (vế phải là unsigned nhé) với x>0, mà NOT x = 255-x (số có 8 bit thôi) vậy -x := 256 - x với x>0.

Hay nói cách khác số -56 biểu diễn unsigned là 200. Với bù 1 thì -x := NOT x, cách này dở ở chỗ là có đến hai số 0.

Trần Hoàn viết 11:27 ngày 01/10/2018

Đối với các kiểu dữ liệu không dấu (ví dụ unsigned int) thì tất cả các bit đều để biểu thị độ lớn.
200 => (0000000...00)11001000 (kiểu dữ liệu n byte thì thêm các bit 0 cho đủ n*8 bit)

Đối với các kiểu dữ liệu có dấu (ví dụ int) thì bit đầu tiên thể hiện có dấu hay không (true hay 1 tức là có dấu
-56 => (1|111111...11)1001000 ((kiểu dữ liệu n byte thì thêm các bit 1 sau bit “âm dương” cho đủ n*8 bit)

Kiểu unsigned char (1 byte) gồm 8 bit dữ liệu, biểu diễn các giá trị từ 2 ^ 0 - 1(= 0) đến 2 ^ 8 - 1 (= 255) (00000000 = 0 => 11111111 = 255)
Chuỗi bit 11001000 thể hiện giá trị 200 trong hệ đếm của con người.

Kiểu char (1 byte) gồm 1 bit dấu và 7 bit dữ liệu, biểu diễn các giá trị từ - (2 ^ 7) (= -128) đến + (2 ^ 7 - 1) (= +127). Phần âm không bị mất chuỗi bit nào để biểu diễn số 0 nên đủ 128 số (10000000 = -128 => 11111111 = -100000000 = 0 => 01111111 = 127)

Trong hệ số không dấu 1 byte, 11001000 = 200
Trong hệ số có dấu 1 byte, 1|1001000 = -56

À, bảng mã ASCII chuẩn chỉ có 128 ký tự thôi bạn

pham hong thai viết 11:26 ngày 01/10/2018

Cám ơn vì sự nhiệt tình ạ

Bài liên quan
0