1
我正在實現C代碼來將16位符號和幅度整數複製到8位符號和幅度整數。這甚至有可能嗎?有人可以解釋如何做到這一點?將16位整數轉換爲8位整數?
代碼片段:
int16_t a = 0x1234;
int8_t b, c;
如何前兩位複製到變量b和接下來的兩個數字到變量c?
我正在實現C代碼來將16位符號和幅度整數複製到8位符號和幅度整數。這甚至有可能嗎?有人可以解釋如何做到這一點?將16位整數轉換爲8位整數?
代碼片段:
int16_t a = 0x1234;
int8_t b, c;
如何前兩位複製到變量b和接下來的兩個數字到變量c?
您可以使用該語言的按位運算符:您需要將數字8和0位分別向右移動以獲取第一個和第二個數字(您還應該使用255來掩蓋它們,以便恰好一個字節被提取):
int16_t i = 0x1234;
uint16_t n = i; // because shifting the sign bit invokes UB
int8_t hi = ((i >> 8) & 0xff);
int8_t lo = ((i >> 0) & 0xff);
這將適合在那裏的所有位,但我不會完全調用兩個部分「符號和量級整數」。特別是下半部分只能被認爲是無符號的。 – Thilo
@Thilo你有什麼建議呢? (我意識到這可能沒有意義,但那是因爲這個問題也不是很有意義。) – 2013-06-12 05:10:11
並不意味着批評你的答案。只是對這個問題發表評論。沒有其他方式將16位合併到2x8中。沒有額外符號位的空間。 – Thilo