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 !
Bài liên quan
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.
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
Range của kiểu
signed char
bằng range của kiểuchar
và bằng[-128; 127]
, còn range của kiểuunsigned char
bằng[0; 255]
. Bạn xem thêm ở đây.Nếu
i > 127
thì giá trị củac
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: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.Ủa bạn đây là lập trình C hay C++ vậy?