算术转换之寻常算术转换

算术转换之寻常算术转换

题目

#include <stdio.h>
int i;// 
int main()
{
    i--;
    if (i > sizeof(i))
    {
        printf(">\n");
    }
    else
    {
        printf("<\n");
    }
    return 0; 
}

运行结果

在这里插入图片描述

题目分析

i为全局变量,不初始化默认为0。i--; 后可以得到 i==1

sizeof(i)计算的是占用内存空间大小,不会有负数,所以sizeof()返回类型是size_t类型的,size_t是无符号整型 unsigned int

进行if条件判断时,比较isizeof(i)的大小

i的类型为int,而sizeof(i)的类型为unsigned int,两者进行比较时,需要将iint类型转换为unsigned int类型后才可以进行比较。

-1的二进制

原码1 0000000 00000000 00000000 00000001

反码1 1111111 11111111 11111111 11111110

补码1 1111111 11111111 11111111 11111111

内存中以补码形式储存
i的类型转为unsigned int
i的值为0xFFFF FFFF,远大于sizeof(i)的返回值4
所以打印结果为>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值