C语言深度解剖-关键字(4)

简介: C语言深度解剖-关键字(4)

signed、unsigned 关键字补充内容

关于大端和小端

我们通过在内存中存储一个值,


用于观察数据在内存中的存储形式。


如下:


例:


字符 a


十进制:-10(所以用十进制打印的结果)


原码:10000000 00000000 00000000 00001010


反码:11111111 11111111 11111111 11110101


补码:11111111 11111111 11111111 11110110(存入内存)


十六进制:ff ff ff f6(在内存中显示的结果)


通过调试观察:



而在内存中存储的却是:f6 ff ff ff


因为我们VS2019的环境是小端存储。


存储方式如下图:



大小端存储数据方式

数据是按照字节为单位存储的,


int 类型是四个字节。


每个字节都有地址,而地址有高地址和低地址之分。


直接说结论:


1.大端模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;


2.小端模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中。


所以我们观察到的数据就是以字节为单位反着存储。


再举一个小端存储的例子:



这就是小端存储的形式。


总结:


大端存储其实就是正着存,小端则是反着存。


那我们该如何判断呢?


判断大小端

例:


#include 
int main()
{
  int a = 1;
  char* pa = (char*)&a;
  if (*pa == 1)//通过观察内存中第一个字节是否为1
  {            //从而判断大小端
  printf("小端\n");
  }
  else
  {
  printf("大端\n");
  }
  return 0;
}

输出:


输出:小端

深入理解数据存储

关于 char 类型的取值范围:


char 是八个比特位,一个符号位,剩下七个数值位。


也就是最小是-127,


最大是127。


但是,


00 00 00 00 与 10 00 00 00


这两组数,00 00 00 00 已经表示0了,那另外一组数据该如何表示?


它表示:-128        


所以char 类型的大小是:[ -128 ~ 127 ]。


练习:

#include 
int main()
{
  char a[1000];
  int i;
  for (i = 0; i < 1000; i++)
  {
  a[i] = -1 - i;//从-1、-2...-128一直遍历到127,然后再加一等于0
  }                 //所以总共是128+127=255
  //strlen遇到\0结束
  printf("%d", strlen(a));
  return 0;
}

输出:


输出:255

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。


相关文章
|
6月前
|
存储 程序员 C语言
C语言关键字是什么?什么是关键字?什么是字符和ascll码值
C语言关键字是什么?什么是关键字?什么是字符和ascll码值
|
4月前
|
C语言
|
4月前
|
存储 C语言
C语言中static关键字的作用与用法解析
C语言中static关键字的作用与用法解析
|
5月前
|
存储 C语言
C语言中的typedef关键字:为类型定义新名称
C语言中的typedef关键字:为类型定义新名称
|
5月前
|
C语言
深入探索C语言中的sizeof关键字
深入探索C语言中的sizeof关键字
|
5月前
|
存储 编译器 C语言
C语言中的关键字与标识符详解
C语言中的关键字与标识符详解
118 0
|
6月前
|
算法 编译器 API
C语言易混淆、简单算法、结构体题目练习、常见关键字总结-1
C语言易混淆、简单算法、结构体题目练习、常见关键字总结
|
6月前
|
安全 编译器 C语言
C语言中的const关键字
C语言中的const关键字
53 2
|
6月前
|
存储 C语言
【C语言】数据:数据类型关键字
【C语言】数据:数据类型关键字
|
6月前
|
存储 编译器 C语言
c语言中static关键字的作用
c语言中static关键字的作用