Thắc mắc về int8_t, int16_t và char

Em có chương trình như này:

#include <iostream>
#include <stdint.h>
using namespace std;
int main(){
	cout << "Code" << "\t" << "Symbol" << endl;
	for (int8_t ascii = 0; ascii <= 126; ascii++){
		cout << ascii << "\t" << static_cast<char> (ascii) << endl;
	}
	system("pause");
	return 0; 
}

Khi em chạy nó sẽ lỗi khiến ascii thành char luôn,


Còn khi thay phần:

for (int8_t ascii = 0; ascii <= 126; ascii++){

thành:

for (int16_t ascii = 0; ascii <= 126; ascii++){

thì nó ok hoạt động tốt,

Mọi người có thể giải thích vì sao không ạ .

int8_t cũng là char thôi, mà đã là char thì nó sẽ in kí tự ứng với code point đó.

4 Likes

Theo mình nghĩ nó khác nhau bởi vì một cái là 8bit ( int8_t) và một cái là 16bit( int16_t) thì độ rộng của kí tự sẽ khác nhau nên cái in được cái không in được

1 Like

Thử tăng giá trị lớn hơn 8 bit xem nó ra kí tự gì.

3 Likes

Nó chạy đúng mà lỗi lầm gì đâu ?

4 Likes

Vì hàm nhận char và hàm nhận int là hai hàm khác nhau.

3 Likes

Câu trả lời ở đây : https://www.learncpp.com/cpp-tutorial/fixed-width-integers-and-size-t/
std::int8_t là signed char, nên cout coi nó là character chứ không phải number
int16_t là signed short, là kiểu dữ liệu number nên cout sẽ hiển thị đúng

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?