/*
有符号整型(int) 与 无符号整型(unsigned int)的运算
1.全局变量,静态变量都是放在静态区,不初始化的时候,默认值为0。
局部变量,放在栈区,不初始化的时候,默认值是随机值,编译器会报错
2.int 与 unsigned int 进行关系运算(比较大小),int会转换为unsigned int。
除此之外,int 与 unsigned int 仍然进行正常的算术运算
*/
#include <stdio.h>
int i;//全局变量
int main() {
printf("%d\n",i);//0
i--;//-1
//sizeof()的返回结果是size_t类型的,是无符号整型。
//当有符号整型和无符号整型进行比较运算时,int(有符号整型)会转换为unsigned int(无符号整型)来运行
//10000000 00000000 00000000 00000001 -1的原码
//11111111 11111111 11111111 11111110 反码
//11111111111111111111111111111111111 内存中-1的补码 作为无符号整型就是一个很大的数,2的32次方-1= 4,294,967,295
if (i > sizeof(i)) { //4,294,967,295 > 4
printf(">\n");
printf("%d\n", i - sizeof(i));// (-1)-4 = -5 但是可以正常的进行算术运算!
//11111111111111111111111111111111111 内存中-1的补码
//00000000000000000000000000000000100 4的补码
//11111111111111111111111111111111011 内存中(-1)-4后的补码
//11111111111111111111111111111111010 反码
//10000000000000000000000000000000101 原码 -5
}
else {
printf("<\n");
}
return 0;
}