首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >检查一个整数类型的值是否适合另一个整数类型

检查一个整数类型的值是否适合另一个整数类型
EN

Stack Overflow用户
提问于 2010-11-10 16:37:13
回答 2查看 90关注 0票数 1

有两种类型的Type1Type2由不同的头提供,对于某些整数类型,这两种类型都是typedefs,但不知道是哪种类型(并且在编译器、OSes等方面可能是不同的)。这个程序能保证正常工作吗(如果它编译的话)

代码语言:javascript
运行
复制
Type1 a = ...;
if (a == (Type2) a) {
  printf("a fits into Type2");
else {
  printf("a doesn't fit into Type2");
}

或者,有没有我没有考虑到的角落情况?

EN

Stack Overflow用户

发布于 2010-11-10 17:33:27

不,我认为不幸的是这还不够。例如,如果Type1short,而Type2int,则左侧的值仍将提升为int。因此,您是在比较相同类型的相同值。

此外,确保进行比较,这两种方式通常都不会有帮助。

你需要做的就是确保你以两种方式进行比较,并且你转换的值是一个如果转换成更窄的类型就会被截断的值。如果这两个类型都是无符号类型,则可以使用类似于

代码语言:javascript
运行
复制
((T1)-1 == (T1)(T2)(T1)-1) && ((T2)-1 == (T2)(T1)(T2)-1)

这还具有作为编译时表达式的优点。

如果这两个类型中的一个或两个都是带符号的,这将更加困难,因为在C中允许使用不同的符号表示法。

编辑:当我写这篇文章的时候,我不知何故忽略了你只想要一个方向。

代码语言:javascript
运行
复制
(T1)-1 == (T1)(T2)(T1)-1

只会告诉你在从T1转换到T2时是否有信息丢失。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4142557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档