关于c:C语言的算数转换

算数转换

  • 当执行算术运算时,如果操作对象的类型不同,就会产生数据类型转换。
  • 转换规则:

    • 朝着精度更高、长度更长的方向转换
    • 保无符号规定:当运算符两边别离是signed 有符号类型和unsigned无符号类型时,产生算术转换,将signed有符号类型转换为无符号类型。
  • 例如:下列输出后果为 大于
#include <stdio.h>
int i ;   //全局变量未初始化,默认为0
int main()
{
    i--;  //i为有符号类型,i = -1
    if (i > sizeof(i))  
    {
        printf("大于");
    }
    else
    {
        printf("小于");
    }
}
  • 在if语句判断时,产生了数据类型的转换

    • i为-1
    • 二进制为1000 0000 0000 0000 0000 0000 0000 0001
    • 补码为:1111 1111 1111 1111 1111 1111 1111 1111
    • 算数转换,当初零碎认定i为unsigned int型,无符号类型均为负数,源反补码雷同
    • 所以当初i的源码也为1111 1111 1111 1111 1111 1111 1111 1111
    • 所以在if语句判断这里,i是大于4的(sizeof(i) = 4)
  • 留神:i的理论值并没有产生扭转,只是在运算时,解析办法变了。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理