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。

相关推荐
Rain50911 分钟前
mini-cc 的 MCP 协议:给 AI 装个 USB-C 接口
c语言·开发语言·前端·人工智能·架构·node.js·ai编程
朔北之忘 Clancy2 小时前
2026 年 3 月青少年软编等考 C/C++ 一级真题解析
c语言·开发语言·c++·青少年编程·题解·考级
Navigator_Z4 小时前
LeetCode //C - 1073. Adding Two Negabinary Numbers
c语言·算法·leetcode
玖玥拾6 小时前
C/C++ 基础笔记(二)
c语言·c++
longxiangam8 小时前
esp-idf dsi 屏幕的驱动实现原理—— 关于零拷贝和 DMA 永续刷新
c语言·单片机·嵌入式硬件
zz34572981138 小时前
函数:python与c语言
c语言·开发语言·python
爱吃生蚝的于勒10 小时前
QT开发第二章——信号和槽
c语言·开发语言·c++·qt
六bring个六10 小时前
c/c++面试踩坑笔记
c语言·数据结构·c++
.千余11 小时前
【Linux】 TCP进阶详解:字节流、粘包问题、异常情况与UDP完整对比2
linux·运维·c语言·开发语言·经验分享·笔记·php
QiLinkOS11 小时前
QiLink 技术委员会选举实施细则
c语言·数据结构·c++·单片机·嵌入式硬件·算法·开源