C语言之补码

文章目录

前言

一、学习目标

二、十进制转二进制

三、二进制转十进制

四、问题解决


前言

补码是计算机底层知识中非常重要的一部分,而进制转换是学习补码的基础,基础的进制转换知识我在《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 =

猜你喜欢

转载自blog.csdn.net/weixin_65334260/article/details/125396198
今日推荐