C语言之补码

本文介绍了C语言中补码的概念,包括学习目标、十进制与二进制的转换,特别是负整数的补码表示。通过实例解析了如何将正、负整数及零转换为二进制,以及如何从二进制还原回十进制数值。同时,讨论了int类型变量的存储范围和溢出情况。
摘要由CSDN通过智能技术生成

文章目录

前言

一、学习目标

二、十进制转二进制

三、二进制转十进制

四、问题解决


前言

补码是计算机底层知识中非常重要的一部分,而进制转换是学习补码的基础,基础的进制转换知识我在《C语言之进制转换》这篇文章中详细阐述过,有兴趣的朋友可以一看。

一、学习目标

  1. 已知一个整数对应的二进制数字,求出对应的十进制数字
  2. 求int类型的变量所能存储的整数范围
  3. 求int类型的整数中最小负数与最大正数的二进制数字
  4. 如果超过某个类型变量所能存储的整数范围会出现什么情况

二、十进制转二进制

1.正整数转二进制

方法:除2取余,直至商为0,后将余数倒叙排列,如果位数不够,则在左边补0凑齐位数。详细内容见 《C语言之进制转换》,这里不再赘述

2.负整数转二进制

方法:先求与该负整数相对应的正整数的二进制数字,然后将所有位取反,并在末尾加1,如果位数不够,则在左边补1凑齐位数

示例:求十进制数字-3对应的的二进制数字

  1. 求出3的二进制数字为11
  2. 将求出的11取反变为00
  3. 00末尾加1,变为01
  4. 如果我们定义-3为int类型的变量,则-3占四个字节,四个字节是32位,而01只有两位,所以需要在01前再补301,即,十进制数字-3对应的二进制数字为1111, 1111, 1111, 1111, 1111, 1111, 1111, 1101。同理,如果我们定义-3为short类型的变量,则-3占两个字节,两个字节是16位,而01只有两位,所以需要在01前再补141,即,十进制数字-3对应的二进制数字为1111, 1111, 1111, 1101。同理,如果我们定义-3为long int类型的变量,则需要在01前再补621,因为long类型的变量占八个字节 

注意:我们在后面的转换过程中均以四个字节为例,即,所有的数字的类型都是int类型

十进制数字-3转为二进制数字后,再将该二进制数字转为对应的十六进制数字为FFFFFFFD,如此一来就可通过程序验证是否转换正确,代码如下:

#include <stdio.h>

int main()
{
	int i = -3;

	printf("%#X\n", i);

	return 0;
}

练习1:求十进制数字-100对应的的二进制数字

  1. 为了方便运算,我们不需要直接将十进制数字100转为对应的二进制数字,可以先将十进制数字100转为对应的十六进制数字,再将十六进制数字转为对应的二进制数字。十进制数字100对应的十六进制数字为64,十六进制数字为64对应的二进制数字为0110, 0100
  2. 0110, 0100取反变为1001, 1011
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值