当前位置: 首页 > 知识库问答 >
问题:

整数转换排名和晋升

王才英
2023-03-14

阅读关于整数提升和整数转换排名我找到了这个链接

>

2.否则,如果两个操作数都具有有符号整数类型或都具有无符号整数类型,则整数转换秩较小的操作数类型将转换为秩较大的操作数类型。

3.否则,如果具有无符号整数类型的html" target="_blank">操作数的秩大于或等于另一个操作数类型的秩,则具有有符号整数类型的操作数将转换为具有无符号整数类型的操作数的类型。

4.否则,如果有符号整数类型的操作数的类型可以表示无符号整数类型的操作数类型的所有值,则无符号整数类型的操作数将转换为有符号整数类型的操作数的类型。

5.否则,两个操作数都将转换为与带符号整数类型的操作数类型相对应的无符号整数类型。

第1点、第2点和第3点是完全清楚的,但我仍然没有为案例4和第5点举个例子。有人能提供一个关于任何实施的例子吗?

据我所知,整数转换等级为:

_布尔

无论与类型相关的字节大小是相等还是更高。对吧?

关于从一种类型到另一种类型的提升或转换。是将位添加到最低类型0或1,还是左端位对其有影响?

我想知道bits视图中的过程是如何进行转换的。

对于整数提升,毫无疑问,它总是可以保存值和符号。

共有1个答案

施茂
2023-03-14

如果无符号类型的秩小于使用它操作的有符号类型,并且它们具有不同的大小,则情况4适用。情况5则如果两者大小相同。

例如,在我的系统上int是32位,long是64位,而long long是64位。如果你有以下情况:

unsigned int a;      // range: 0 to 4294967295
long b;              // range: -9223372036854775808 to 9223372036854775807

unsigned long c;     // range: 0 to 18446744073709551615
long long d;         // range: -9223372036854775808 to 9223372036854775807

对于涉及ab的表达式,它们是无符号整数,任何有效的无符号整数都可以放入。因此,在这种情况下,a被转换为long

相反,对于涉及cd的表达式,它们是无符号长,一个不能包含无符号长的所有值。因此,两个操作数都被转换为无符号long-long

关于在位级别上的升级/转换期间发生的事情,让我们首先假设较低秩类型比较高秩类型小,并且有符号类型使用2的补码表示。

对于从32位int到64位long的转换,如果值为正数,则在左侧添加包含所有0位的4个字节。如果该值为负,则在左侧添加包含所有1位的4个字节。例如,值5的表示从0x00000005更改为0x0000000005。对于值-5,表示从0xfffffffb更改为0xfffffffffffb

 类似资料:
  • 问题内容: 我有一个代码段: 为什么不自动类型转换为while ? 问题答案: 因为是,并且具有更大的范围。因此,将其分配给可能会导致数据丢失。 是一个常数,而编译时间保证在的范围内。

  • 问题内容: 我正在为我的游戏创建高分功能,但无法正常工作 这是我的方法: 它所做的是从.txt文件中读取最新的高分,并检查玩家得分是否更高(如果是),它将新的高分写入文件 我通过使用then并在第10行将字符串从int转换为int,作为测试,但是我抛出一个错误,说即使我转换为int并转换了self ,也无法添加str和int 。得分,因此出于某种原因其中一项转换无效 问题答案: 返回一个整数,但是

  • 主要内容:二进制表示小数,浮点数表示方法,转换函数,实例,实例关键词 :定点数, 浮点数, $realtobits, $bitstoreal 本节主要介绍实数与整数间相互转换的函数:$realtobits, $bitstoreal,同时说明下 real 型 (同 C 语言中的 double float)变量是怎么用多位宽的二进制码表示的。 二进制表示小数 二进制表示小数 十进制整数用二进制来表示时,需要进行数据除以 2 然后取余的操作。 小数部分用二进制来表

  • 问题内容: 我想知道是否有任何方法可以将Integer类型的变量转换为BigInteger。我尝试类型转换Integer变量,但出现一个错误消息,指出不可转换的类型。 问题答案: 您想要的方法是BigInteger#valueOf(long val) 。 例如, 首先创建String是不必要的,也是不希望的。

  • 问题内容: 我需要使用反射获取字段的值。碰巧我并不总是确定该字段的数据类型是什么。为此,为了避免某些代码重复,我创建了以下方法: 并使用如下方法: 要么 问题是我似乎无法转换为: 有没有更好的方法来实现这一目标? 我正在使用Java 1.6。 问题答案: 不,即使可以从转换为,也无法转换为。对于已知为数字的 单个 值,并且想要获得长整型值,可以使用: 对于数组,这将比较棘手…

  • 问题内容: 我有Hibernate方法,它返回给我一个BigDecimal。我有另一个API方法,我需要将该数字传递给它,但是它接受Integer作为参数。我不能更改两种方法的返回类型或变量类型。 现在如何将BigDecimal转换为Integer并将其传递给第二种方法? 有没有解决的办法? 问题答案: 您将致电(或仅致电),如果您丢失了信息,它甚至会引发异常。返回一个int,但是自动装箱可以解决