0
A
回答
1
如果該值介於0到SHRT_MAX
(含)之間,則沒有什麼可擔心的,並且演員((short)
)是可選的(除非您的編譯器是偏執狂或配置爲偏執狂)。
如果unsigned short
值可以比SHRT_MAX
更高,大約爲將其轉換爲short
的唯一合法途徑是:
#include <limits.h>
short ushort2short(unsigned short s)
{
if (s <= SHRT_MAX)
return s; // or return (short)s;
s -= SHRT_MAX + 1; // now s is 0 ... SHRT_MAX
return (short)s - SHRT_MAX - 1;
}
這當然,依賴於簽名的短褲是2與SHRT_MIN
=補充 - SHRT_MAX
- 1.
一個現代編譯器將優化掉這個函數裏面所有的廢話,並生成代碼返回s
。
編輯:編譯上面用gcc 4.6.2爲gcc -Wall ush2sh.c -O2 -S -o ush2sh.s
這個彙編代碼:
.file "ush2sh.c"
.text
.p2align 2,,3
.globl _ushort2short
.def _ushort2short; .scl 2; .type 32; .endef
_ushort2short:
LFB0:
.cfi_startproc
movl 4(%esp), %eax
ret
.cfi_endproc
LFE0:
相關問題
- 1. 將n位整數從無符號轉換爲有符號
- 2. AWK將大無符號整數轉換爲有符號整數(二進制)
- 3. 將無符號字符(數組)轉換爲無符號整數(數組)
- 4. 將無符號整數變量轉換爲帶符號變量
- 5. 將有符號整數轉換爲無符號長整型的最佳方法?
- 6. 有效地將雙射投影轉換爲週期符號
- 7. C將無符號字符轉換爲無符號字符:4
- 8. C++有符號整數轉換爲無符號位數更多位
- 9. 符號 - 無符號轉換
- 10. 如何將_m128i轉換爲帶有SSE的無符號整數?
- 11. 將無符號字符轉換爲LPCSTR
- 12. 將NSData轉換爲無符號字符*
- 13. 爲什麼將帶符號的負數轉換爲無符號數?
- 14. 將二進制字符串轉換爲有符號整數 - Python
- 15. 將無符號字符數組轉換爲整數
- 16. 將HTML符號轉換爲Java符號
- 17. 將無符號整數轉換回char *?
- 18. 有符號和無符號整數?
- 19. Integer.parseInt() - 有符號和無符號數
- 20. 轉換爲unsigned char無符號整數*
- 21. 如何將有符號字節數組轉換爲浮點數?
- 22. 將二進制數據轉換爲有符號整數
- 23. 無符號字符數組與int轉換爲無符號字符
- 24. 在無符號整數和有符號整數之間進行C++轉換
- 25. MultiByteToWideChar將(°)度數符號轉換爲
- 26. 將符號轉換爲數字圖
- 27. 將Ruby符號轉換爲整數
- 28. 在C++中將無符號字符(字節)數組轉換爲無符號短符號
- 29. 如何將uint32轉換爲無符號字符數組
- 30. 將std :: string(保證數字)轉換爲無符號字符
是,即使是*正確*的方式?如果我想轉換'0',那麼通過你的方案,我最終用'-32768'? –
是的,現在你得到-32767。好多了。 –
你忘了告訴我們「轉換」對你意味着什麼。 –