Tôi đã cố gắng chạy mã mã sau:Bitshifting trong C++ sản xuất các câu trả lời sai
char c = (2 << 7) >> 7
mà nên trở về 0 vì 2 có biểu diễn nhị phân này như một char
:
0 0 0 0 0 0 1 0
Sau 7 thay đổi trái , chúng tôi nhận được
0 0 0 0 0 0 0 0
Sau đó, sau bảy ca phải, chúng tôi nhận được
0 0 0 0 0 0 0 0
Tuy nhiên, tôi nhận được kết quả như 2, chứ không phải 0.
Trình biên dịch nói rằng 2 << 7
là 256, nhưng đó là một char
và vì vậy nó không phải là 256.
tôi hiểu rằng 2 << 7
sẽ được tính như int
s và câu trả lời sẽ được đưa vào c
nên 256 >> 7
là 2.
tôi đã cố gắng để cast 2 đến char (ví dụ: (char)2>>7
) nhưng nó cũng không hoạt động.
Tôi đang cố gắng để trích xuất từng bit từ char
, vì vậy tôi đã viết mã này:
char c = 0x02;
for(int i=0;i<7;i++)
{
char current = (c<<i)>>7;
}
Làm thế nào tôi có thể nhận được mỗi bit? Có gì sai với cách của tôi?
'2 << 7' * không * a 'char'. –
Vui lòng không thay thế văn bản câu hỏi của bạn bằng "cố định cảm ơn" nếu bạn tìm ra điều gì sai. Thay vào đó, thêm một câu trả lời giải thích những gì đã sai. – templatetypedef
Tôi quên nhưng đây là một bản dupe chắc chắn. – haccks