整形在内存中的存储的方式

整形在内存中的存储的方式


介绍一个被误会的操作符—— sizeof

  • sizeof 计算大小,单位字节 的操作符

  • 我们的 sizeof 是操作符,不是函数;主要是因为它打上了,括号( ),被误会了,

  • 其实我们也可以不使用括号的,因为它是操作符,但是不建议;带上括号,这是代码的好风格。



#include<stdio.h>

int main()
{
	int a = 10;
	printf("%d\n", sizeof(a));
	printf("%d\n", sizeof a);
	printf("%d\n", sizeof(int));
	return 0;
}


  • 结果:

在这里插入图片描述


类型的意义


  • C语言中为何要有类型:
    1. 本质上内存进行合理的划分,按要求索取,减少内存空间的浪费,毕竟,所有程序的运行都需要在内存中的,内存弥足珍贵。
  • 类型为什么在C中有这么多种:
    1. 应用场景不同,解决应用场景计算机方式不同得的不同,比如:整形计算,字符计算…等,需要空间的大小也不一样的,本质:就是用最小的成本解决各种多样化的场景问题。

整形的存放

原码,反码,补码

  • 原码 :直接将数值按照二进制的规则翻译成二进制就可以了,注意负数的符号位。
  • 反码 :将原码符号位不变,其他位,按位取反
  • 补码 :反码 + 1 就是可以得到补码,注意,符号位也要加到。进位的,只是一般我们进位不到符号位

补码
  • 在计算机中,整形数值一律用补码表示和存储。原因在于,使用补码,可以将符号位和数值统一处理,同时,加法和减法也可以统一处理 (CPU只有加法器)。+(-)
  • 此外,补码与原码相互转换,其运算过程是相同的,不需要额外附加硬件电路,节约成本。

负数的存放表示:

  • 这里主要讲解的是负数的形式
  • 因为正数的 原码=反码=补码

在这里插入图片描述


补码转原码的两种方法:
方法一:
  1. 将补码 - 1
  2. 符号位不变,取反

在这里插入图片描述


方法二:
  • 按原码变补码的方法来一遍
  • 符号位不变,按位取反
  • 反码 + 1
  • 这种方法更好一些因为,这是计算机的一个原理:计算机只要一个电路,就可以实现,原码反码补码的相互转换的功能,大大节约了成本。

在这里插入图片描述


代码实践:

  • 请好好理解一下下面的代码:

#include<stdio.h>
int main()
{
	unsigned int num1 = -10;
	signed int num2 = -10;
	printf("num1 =%d\n", num1); // -10
	printf("num2 =%d\n", num2); // -10
	printf("num1 =%u\n", num1); // 4294967286
	printf("num2 =%u\n", num2); // 4294967286

	return 0;
}


  • 结果:

在这里插入图片描述


解析:
  • 通过上述代码,以及相应的结果的反馈
  • 我们发现
    1. 无论是我们使用 无符号类型(unsigned)的变量,还是有符号类型(signed) ,存放一个 负数 ( -10),我们使用打印格式 %d 的结果都是 -10 ;
    2. 无论是我们使用 无符号类型(unsigned)的变量,还是有符号类型(signed) ,存放一个 负数 ( -10),我们使用打印格式 %u 的结果都是非常大的数 4294967286;

在这里插入图片描述

  • 那么这里的变量类型什么时候有效果的
    1. 变量存的过程:
      • 存:字面数据必须转成二进制补码,再放入内存空间当中,所以,所谓的符号位(正,负 )完全看数据本身是否携带 + — 号,和类型变量的有无符号(signed,unsigned)无关!
    2. 变量取的过程:
      • 取:取数据一定要先看变量本身的类型,然后才决定要不要看最高符号位,如果不需要,直接二进制。如果需要侧需要将补码转成原码,然后才能识别

  • 上述代码 第 9 ~ 10 代码的 图解:

在这里插入图片描述

在这里插入图片描述


二进制快速转换的口诀:


在这里插入图片描述


最后:

每博一文案:

师傅说,信任就像一把刀,在你决定把它交出去之前,要学会认清对面的人,交给对的人,他会保护你,交给错的人只会伤害你,要认清一个人。

​ —————— 一禅心灵庙语

限于自身水平,其中存在的错误,希望大家给予指教,韩信点兵——多多益善!谢谢大家,后会有期,江湖再见!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值