gpt4 book ai didi

c - 如果 ((x+(y<<16)) == ('a' + ('b' <<16))) 在这种情况下是否存在转换问题

转载 作者:太空宇宙 更新时间:2023-11-04 02:10:58 24 4
gpt4 key购买 nike

我有以下代码

char x ='s', y='e';

if((x+(y<<16)) == ('a'+('b'<<16)))
//do something

switch (x+(y<<16)) {
case 'a'+('b'<<16):
//do something
break;

ifswitch 中进行的比较是否存在转换问题?

最佳答案

您是否打算将第二个值移位 16 位,*然后添加第一个值?如果是这样,那么你就会遇到问题,因为 +优先级高于 <<

下面两个表达式证明了这一点:

'a' + 'c' << 16
'b' + 'b' << 16

评估给我们:

printf("%X : %X\n", 'a' + 'c' << 16, 'b' + 'b' << 16);

结果是:

C40000 : C40000

这是因为'a''c'都提升为 int ,加法完成,然后左移16位。同样与 'b''b' .自 ('a' + 'c') == ('b' + 'b') ,结果是一样的。

如果您打算(或假定)这样做:

'a' + ('c' << 16)
'b' + ('b' << 16)

printf("%X : %X\n", 'a' + ('c'<<16), 'b' + ('b'<<16));

结果是:

630061 : 620062

我怀疑这就是您想要达到的目的。如果不是,并且您依赖于当前的评估优先级,那么您可能对现有的没问题。

EDIT 已更新以更改问题内容:

本身应该没有类型转换问题。所有值都被编译器提升为 int目前所写的评估。如果您打算将结果分配给小于 int 的值你会有问题。甚至一个short 16 位不够宽,因为那是您的移位深度。您至少需要 24 位空间才能进行正确的评估,并且您的实现 int除非你在一些半生不熟的嵌入式系统上,否则你可能会同意这一点(我见过更奇怪的东西)。

关于c - 如果 ((x+(y<<16)) == ('a' + ('b' <<16))) 在这种情况下是否存在转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14161696/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com