赞
踩
目录
我们都知道内置的数据类型有:
不知道大家是否好奇它们本身类型的意义是什么呢???
我将从下面2个方面来讲解:
1.使用这个类型开辟内存空间的大小(大小决定了使用范围)
2.如何看待内存空间的视角
- 类型的基本归类
- 整型家族:
- 浮点数家族:
- 构造类型:
而数组类型:除去变量名就是数组类型
比如:
int arr[10] 类型:int [10]
int arr[5] 类型:int [5]
char arr[10] 类型:char [10]
这三个就是不同的类型
- 指针类型:
- 空类型:
我们知道创建变量是需要向内存开辟空间的。空间的大小是根据类型的不同而不同
比如,我们创建了int 类型的a和b,我们都知道int类型要分配4个字节的空间,那在计算机中是如何存储的呢??我们往下看!!
在这之前我们需要了解一些原码 反码 补码的一点知识
而补码就是在反码上+1
我们为什么要讲这个呢???因为数据存放内存中其实存放的就是补码!!
自然我们也会有疑惑,为什么呢??
我们通过调试窗口看a和b变量在内存中的存储
这时,我们就看见了在内存中a和b变量在内存中的存储是以补码的形式,但我们也有新的疑惑,是不是顺序有点问题呢???
这时,我们要讲到大小端,那什么是大小端呢??
大端:是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中
小端:是指数据的高位保存在内存的高地址中,而数据的低位,保存在内存的低地址中
为什么要有大端和小端呢??
我们来验证一下在VS中是小端存储还是大端存储呢??
- int cheak_sys()
- {
- int i = 1;
- return (*(char*)&i);
-
- }
-
- int main()
- {
- int ret = cheak_sys();
- if (ret == 1)
- {
- printf("小端\n");
- }
- else
- {
- printf("大端\n");
- }
-
-
- return 0;
- }
通过验证我们发现在VS中,是以小端的形式存储的,这时我们也就能理解a和b顺序为什么是倒着存储的了
- int main()
- {
- char a = -1;
- signed char b = -1;
- unsigned char c = -1;
- printf("a=%d b=%d c=%d", a, b, c);
-
- return 0;
- }
结果是多少呢???
为什么呢???
所以unsigned char a结果就是255
我们来看下列代码:
int main() { char a = -128; //10000000 00000000 00000000 10000000 -原码 //11111111 11111111 11111111 01111111 -反码 //11111111 11111111 11111111 10000000 -补码 //发生截断 10000000 //整型提升后 11111111 11111111 11111111 10000000 printf("%u\n", a); return 0; }我们可以通过计算机来看一下
我们来看最后一道例题:
- unsigned char i = 0;//0~255
- int main()
- {
- for (i = 0; i <= 255; i++)
- {
- printf("Hello World\n");//死循环打印 因为unsigned char 范围为0~255 当i为255时,i++后会变成0 形成一个循环 所以for循环条件恒成立
- }
-
- return 0;
- }
为什么会循环打印呢???我们知道unsigned char i
的范围为0~255 又因为是无符号数,当i超过255时,会变成0
所以满足for循环条件,一直打印
最后:希望通过这篇文章让你对无符号整数有更好的理解,我也会不定时更新,分享我的学习经历
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。