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。

相关推荐
yyy(十一月限定版)4 分钟前
C语言——排序算法
c语言·开发语言·排序算法
黎雁·泠崖2 小时前
指针收官篇:sizeof/strlen + 指针运算笔试考点全梳理
c语言·开发语言
lingran__2 小时前
数据在内存中的存储详解(C语言拓展版)
c语言·开发语言
superman超哥2 小时前
仓颉语言中异常处理入门的深度剖析与工程实践
c语言·开发语言·c++·python·仓颉
德福危险3 小时前
C语言数据类型与变量 系统总结笔记
c语言·笔记·算法
若风的雨4 小时前
ARM Trusted Firmware 启动流程:从汇编到 C 语言的渐进式初始化
c语言·汇编·arm开发
疑惑的杰瑞4 小时前
【C】顺序结构
c语言·内存划分
小龙报4 小时前
【初阶数据结构】从 “数组升级” 到工程实现:动态顺序表实现框架的硬核拆解指南
c语言·数据结构·c++·算法·机器学习·信息与通信·visual studio
SELSL4 小时前
Linux文件属性及目录
linux·c语言·linux目录文件·linux文件属性、目录api·linux文件属性
秦苒&5 小时前
【C语言指针五】转移表、回调函数、qsort、qsort函数的模拟实现
c语言·开发语言·c#