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。

相关推荐
白山编程大哥22 分钟前
Lua 中使用 C 语言的用户自定义类型——userdata
c语言·junit·lua
无敌贵点大王1 小时前
RTThread学习记录13——关于要使用一个外设,RTThread与cubemx到底要怎么配合?
c语言·stm32·学习·rtthread
phltxy1 小时前
C 语言动态内存管理:从申请空间到安全释放
c语言·开发语言·ui
上位机妹子2 小时前
C 语言 数组删除指定元素(快慢指针法)
c语言·数据结构·算法
心中有你02142 小时前
【路径规划】A*寻路算法最通俗易懂讲解(C语言完整实现+详细注释)
c语言·开发语言·算法
大圣编蚕2 小时前
C语言入门:基本语法汇总
c语言·开发语言
en.en..3 小时前
C语言---宏
c语言·开发语言
白山编程大哥4 小时前
适合初学者练习的 C/C++ 开源项目推荐
c语言·c++·开源
小灰灰搞电子4 小时前
C 语言 <stdlib.h> 头文件详解
c语言·stdlib.h
Navigator_Z5 小时前
LeetCode //C - 1276. Number of Burgers with No Waste of Ingredients
c语言·算法·leetcode