使用结构值在C中使用char转换为int

时间:2014-09-09 16:03:50

标签: c variables char int

我试图将两个字符相互比较,但将它们视为整数。这些是链表中的结构值。我打印出temp->next->variabletemp->variable并确认if语句应该成立ex: 3 > 2。但我认为它可能不起作用,因为它们是char

它们是char值的事实会对比较产生影响吗?

if(temp->next->variable > temp->variable)
{
    ....
}

2 个答案:

答案 0 :(得分:0)

根据C标准(6.5.8关系运营商)

  

3如果两个操作数都有算术类型,则通常算术   转换已完成。

通常的算术转换包括整数提升,特别是意味着char类型的对象转换为int类型的对象

考虑到char类型的行为类型为unsigned charsigned char。因此,如果设置了char类型的对象的符号位,则可以得到不同的比较结果。

答案 1 :(得分:0)

字符是8位长度的整数,所以如果你总是将字符视为整数,那么这将具有你想要的确切行为。要小心,因为有些编译器允许char默认为unsigned,有些是签名,这可能会产生看似随意的问题。 (如果两个数字具有相同的最高位,则不会有所不同,否则结果将与您的预期相反,如果签名也与您期望的相反。)

如果您将它们视为字符,那么这将为您提供字典比较,这是基于该字符的内部整数表示。最好检查一下你的语言环境是什么 - 你的程序是使用ASCII或Unicode 8位的查找表还是其他任何东西。

如果你仍然遇到隐藏的问题,常见的错误是有许多分层指针,即使整个过程中使用了箭头[ - >],你仍然可能需要应用去引用[*],否则你我会暗中测试他们在记忆中的相对位置。