對於這個任務,我只能使用基本的按位運算符和沒有控制結構,所以我已經拿出這個代碼到目前爲止將符號大小轉換爲two's complement。從符號幅度轉換爲二進制補碼
int sm2tc(int x) {
// Invert and add 1
// Problem: sm has 2 zeros.. 1000...000 & 0000...000
int tmin = 1 << 31;
int mask = x >> 31; // Determine sign of x
int mask2 = ~tmin; // Negate tmin to get 0111111...
int first = (x^mask) + (~mask + 1) ;
int second = first & mask2; // Turns of MSB
return second;
}
我哪裏出錯了?
你不應該依賴32位的int。使用'int32_t'確定('stdint.h')。 – 2011-09-23 20:10:36
該代碼正在32位Linux機器上運行,用於評分和在我的機器上運行。如果我希望這是可移植的,我想我可以使用(sizeof(int)* CHAR_BIT - 1)來存儲位值。 – tippenein
如果練習的目的是爲了具有良好定義的位操作並對位進行簽名,你應該使用無符號類型。 –