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
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
Đố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 = -1 và 00000000 = 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
e cũng hóng giải thích
thật sự là giáo sư Lê Thị Ất viết sách khó hiểu thật
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
Cám ơn bạn nhiều
hehe, không có gì
à à cho e hỏi bác đang theo học gì vậy
tui chưa có phân chuyên ngành, vẫn đang học đại cương các kiểu thôi
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
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.
Đố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
hay1
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
) đến2 ^ 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 = -1
và00000000 = 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
Cám ơn vì sự nhiệt tình ạ