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。好多了。 –
你忘了告诉我们“转换”对你意味着什么。 –