【问题标题】:char to int in C with struct valueschar 到 int 在 C 中具有结构值
【发布时间】:2014-09-09 16:03:49
【问题描述】:

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

它们是char 值这一事实是否会对比较产生影响?

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

【问题讨论】:

  • '3' > '2' 是真的,无论它们是字符还是整数。但是'6' > 'H' 是错误的,因为那是ascii(54) > ascii(72)
  • 请注意char 可能已签名或未签名,具体取决于您所在的位置。
  • 简短回答:它会工作

标签: c variables char int


【解决方案1】:

字符是 8 位长度的整数,因此如果您总是将字符视为整数,这将具有您想要的确切行为。小心,因为一些编译器允许 char 默认为无符号,一些为有符号,这可能会产生看似随机的问题。 (如果两个数字的最高位相同,则不会有区别,否则结果将与您的预期相反,如果符号性也与您的预期相反。)

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

如果您仍然遇到隐藏的问题,一个常见的错误是有许多分层指针,即使始终使用箭头 [->],您仍可能需要应用取消引用 [*],否则您会偷偷测试他们在内存中的相对位置。

【讨论】:

    【解决方案2】:

    根据 C 标准(6.5.8 关系运算符)

    3 如果两个操作数都具有算术类型,则通常的算术 执行转换。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-18
      • 2018-05-30
      • 1970-01-01
      • 2014-11-01
      • 1970-01-01
      • 2012-11-16
      • 2015-06-29
      • 2010-09-22
      相关资源
      最近更新 更多