Đây là sự nghi ngờ về biểu diễn bit của các số nguyên đã ký. Ví dụ, khi bạn muốn biểu diễn -1, nó tương đương với phần bù của 2 (+1). Vì vậy, -1 được biểu diễn bằng 0xFFFFFFF. Bây giờ khi tôi thay đổi số của tôi bằng 31 và in kết quả nó sẽ trở lại như -1.Biểu thị số bit của các số âm
signed int a = -1;
printf(("The number is %d ",(a>>31));//this prints as -1
Vì vậy, bất kỳ ai cũng có thể giải thích cho tôi cách bit được biểu diễn cho số âm?
Cảm ơn.
Nhìn từ góc độ khác: suy nghĩ về bất kỳ sự dịch chuyển N-bit (ký hiệu mở rộng) nào bằng cách chia cho 2^N, làm tròn XUỐNG (theo hướng trừ cực, không tới 0). Do đó -1 dịch chuyển sang phải (có dấu mở rộng) bất kỳ số lần nào sẽ tiếp tục sản xuất -1. – vladr