Tôi có một đoạn ngắn, instr
, trông như thế này:Đăng mở rộng một số chín-bit trong C
1110xxx111111111
tôi cần phải rút ra khỏi bit 0-9, mà tôi làm với (instr & 0x1FF)
. Số lượng này sau đó được lưu trữ trong một đoạn ngắn mới. Vấn đề là khi điều này xảy ra, nó sẽ trở thành 0x0000000111111111
, không phải 0x1111111111111111
như tôi muốn. Làm thế nào tôi có thể sửa lỗi này? Cảm ơn!
EDIT
Dưới đây là các mã:
short instr = state->mem[state->pc];
unsigned int reg = instr >> 9 & 7; // 0b111
state->regs[reg] = state->pc + (instr & 0x1FF);
Đây là một mô phỏng mà đọc trong lắp ráp. state
là máy, regs[]
là các thanh ghi và pc
là địa chỉ của lệnh hiện tại trong mem[]
. Điều này là tốt nếu chín bit cuối cùng đại diện cho một số dương, nhưng nếu chúng đại diện cho -1, nó được lưu trữ như tất cả 1, được hiểu là một giá trị tích cực bởi mã của tôi.
Không chắc tôi hiểu câu hỏi hoặc quá trình bạn đang sử dụng. Chăm sóc để chia sẻ mã bạn đang sử dụng để có được những kết quả này? – joce
Điều này không rõ ràng, ai sẽ trở thành '0x1111111111111111'? – MByD