C语言,-1与sizeof()返回值的比较

cpp 复制代码
#include <stdio.h>
int i;
int main()
{
	i--;
	if (i > sizeof(i))
	{
		printf("A");
	}
	else
	{
		printf("B");
	}
	return 0;
}

这段代码的输出结果是社么呢?

这个题目有很多要注意,容易出现错误的点:

1.全局变量和静态变量的初始化如果不赋值,默认初始化为0。

2.sizeof的返回值是size_t类型的数据,size_t存放的是无符号整型的数据。

3.当一个表达式里既有有符号整型,又有无符号整型,会将表达式里的对象都转化为为无符号整型。

i在i--之后变成了-1,sizeof(i)的大小为四个字节,所以返回值为无符号整型4,同时-1也会被转化为无符号整型。

关于-1转化为无符号整形:

-1是负数,原码为

10000000000000000000000000000001

反码为:

11111111111111111111111111111110

补码为:

11111111111111111111111111111111

无符号整型就没有最高位代表正负的规则了,默认-1的补码当作正数的补码处理,正数的原码反码补码一致,所以-1的原码为11111111111111111111111111111111,转化为十进制为4294967286,当然是大于sizeof的返回值4。

所以代码的结果输出为A。

相关推荐
智者知已应修善业13 小时前
【51单片机数码管逐位显示1-8余位不亮】2024-10-23
c语言·经验分享·笔记·嵌入式硬件·51单片机
caimouse14 小时前
ReactOS 图形系统分析(47):GDI 批处理 — gdibatch.c
c语言·开发语言
caimouse15 小时前
ReactOS 窗口系统分析(1):窗口对象与创建 — window.c
c语言·开发语言
caimouse15 小时前
ReactOS 图形系统分析(53):系统库存对象 — stockobj.c
c语言·开发语言·spring
caimouse16 小时前
ReactOS 图形系统分析(52):OpenGL 支持 — wingl.c
c语言·开发语言
j7~16 小时前
【C语言】《C语言函数递归完全指南:思想、限制、经典例题(阶乘/斐波那契/青蛙跳台阶/汉诺塔)与迭代优化》
c语言·函数递归·汉诺塔问题·青蛙跳台阶问题·递归与迭代·n的阶乘
YSL07012418 小时前
动态内存管理
c语言
BreezeJuvenile18 小时前
基于C语言的SPSC环形缓冲区程序实现
c语言·环形缓冲区
SuperByteMaster18 小时前
recursive mutex的使用场景和场景代码
c语言
caimouse19 小时前
ReactOS 窗口系统分析(2):窗口类 — class.c
c语言·开发语言