Tôi nhận được kết quả từ sự dịch chuyển trái mà tôi không thể tìm thấy lời giải thích.Tại sao kết quả của unsigned char << unsigned char không phải là unsigned char
unsigned char value = 0xff; // 1111 1111
unsigned char = 0x01; // 0000 0001
std::cout << "SIZEOF value " << sizeof(value) << "\n"; // prints 1 as expected
std::cout << "SIZEOF shift " << sizeof(shift) << "\n"; // prints 1 as expected
std::cout << "result " << (value << shift) << "\n"; // prints 510 ???
std::cout << "SIZEOF result " << sizeof(value << shift) << "\n"; // prints 4 ???
Tôi đã chờ đợi kết quả được 1111 1110
nhưng thay vào đó tôi nhận được int
(?) Với giá trị của 1 1111 1110
.
Làm thế nào các bit của một ký tự chưa ký được chuyển sang trái để các bit bị cắt ngắn và kết quả là 1111 1110?
Điều tôi đang cố gắng làm là đọc chuỗi byte và diễn giải chúng dưới dạng số nguyên có độ dài khác nhau (1-32 bit).
F0 F5
1111 0000 1111 0101
có thể
0F (first 4 bits)
0F (next 8 bits)
05 (last 4 bits)
Có một cái gì đó này để làm với thực tế rằng số học không được thực hiện với các loại nhỏ hơn int?
11111111 << 1 là trên thực tế 111111110, bạn đang in kết quả của biểu thức, hãy thử làm: 'value = value << shift;' và sau đó 'cout << value;' – Yaniro