30/09/2018, 19:58

Chuyển kiểu từ int sang char

Chào các bạn ! Mình có một đoạn code thế này :

#include <stdio.h>
#include <iostream>
int main(int n, char** args)
{
	int i = 140;
	char c = i;
	int j = c;
	printf("%d", j);
	system("pause");
}

-Yêu cầu 1: chạy và giải thích kết quả .-thay char c bằng unsigned char c chạy và giải thích kết quả.
-Yêu cấu 2::đưa ra giải pháp để giá trị của j đúng bằng giá trị của i(giả sử i 0->255 và không sử dụng unsigned char)

Với yêu cầu 1 mình search google và cũng tìm được cách giải thích nhưng với yêu cầu 2 thì mình chịu .Bạn nào có giải pháp nào chỉ mình với !

viết 22:03 ngày 30/09/2018

bạn dùng các phép toán số học như nhân chia, hoặc các phép toán trên bit như dịch trải, phải để làm xem.

Noob viết 22:09 ngày 30/09/2018

Mình nghĩ chuyển 140 thành mã nhị phân rồi thêm 0 đằng trước, như thế bit dấu sẽ là 0 là số dương

Trần Minh Hòa viết 22:12 ngày 30/09/2018

Range của kiểu signed char bằng range của kiểu char và bằng [-128; 127], còn range của kiểu unsigned char bằng [0; 255]. Bạn xem thêm ở đây.

Nếu i > 127 thì giá trị của c sẽ bị overflow và được gán giá trị ngược trở lại.
Vd: i = 127 thì c = 127; i = 128 thì c = -128; i = 129 thì c = -127; i = 130 thì c = -126; …

ở đây ko có một giải pháp chính tắc nào để giải quyết yêu cầu của bạn mà ko khai báo unsigned char, bởi vì bạn đang cố gắng biểu diễn một giá trị nằm ngoài phạm vi của một kiểu dữ liệu. Tuy nhiên có một cách mẹo mà mình ko khuyến khích lắm:

#include <stdio.h>
#include <iostream>
int main(int n, char** args)
{
	int i = 140;
	char c = i;
	int j;
	if (i <= 127)
		j = c;
	else
		j = 2*127 + c + 2;

	printf("%d %c\n", j, c);
	system("pause");
}

Mục đích của bài tập này chỉ là để cho thấy sự khác nhau giữa 2 kiểu dữ liệu char và unsigned char mà thôi.

nghia viết 21:59 ngày 30/09/2018

Ủa bạn đây là lập trình C hay C++ vậy?

Bài liên quan
0