C语言 | 进制转换

将任一整数转换为二进制形式。

  • 问题分析与算法设计

将十进制整数转换为二进制形式的方法很多,这里实现利用C语言的位操作递归函数进行处理。对于C语言来说,一个整数在计算机内部就是以二进制形式存储的,所以只要将整数在内存中的二进制表示输出即可

#include <stdio.h>/**输出x的二进制位数x:整数sizeof(int):int型在内存中所占的字节数;sizeof(int)*8:int对应的位数*/
void printBin(int x, unsigned int n)
{int bin = 0;if (n > 0){if (n == (sizeof(int)*8)){printf("%-4d", x);printf(" -> ");printf("0b");}bin = (unsigned)(x&(0x1<<(n-1)))>>(n-1);/*输出第n位 *///printf("[n = %2d]: %d\n", n,bin);printf("%d",bin);printBin(x, n - 1); /* 递归调用,输出x的后n-1位 */}else{printf("\n");}
}int main(int argc, char* argv[])
{printBin(11, sizeof(int)*8);printBin(-11, sizeof(int)*8);printBin(0, sizeof(int)*8);printBin(-8, sizeof(int)*8);return 0;
}
  • 编译、执行:

[fly@fly-vm source]$ make
gcc -o printBin printBin.c -g -Wall
[fly@fly-vm source]$ ./printBin
11   -> 0b00000000000000000000000000001011
-11  -> 0b11111111111111111111111111110101
0    -> 0b00000000000000000000000000000000
-8   -> 0b11111111111111111111111111111000
  • 讨论:

充分利用了C语言可以对位进行操作的特点。

  • 拓展:

将任意正整数转换为四进制或者八进制。


1) 原码

将一个整数转换成二进制形式,就是其原码。

通俗的理解,原码就是一个整数本来的二进制形式。

2) 反码

谈到反码,正数和负数要区别对待,因为它们的反码不一样。

对于正数,它的反码就是其原码(原码和反码相同);

负数的反码是将原码中除符号位以外的所有位(数值位)取反,也就是 0 变成 1,1 变成 0。

3) 补码

正数和负数的补码也不一样,也要区别对待。

对于正数,它的补码就是其原码(原码、反码、补码都相同);负数的补码是其反码加 1。

原码、反码、补码的概念只对负数有实际意义,对于正数,它们都一样。

在计算机内存中,整数一律采用补码的形式来存储。

这意味着,当读取整数时还要采用逆向的转换,也就是将补码转换为原码。

将补码转换为原码也很简单:先减去 1,再将数值位取反即可


整数在内存中是如何存储的,为什么它堪称天才般的设计

小数在内存中是如何存储的,揭秘诺贝尔奖级别的设计(长篇神文)

C语言 | 进制转换相关推荐

  1. c语言进制转换pdf下载,C语言实现任意进制转换.doc

    C语言实现任意进制转换.doc includestdio.h#includemath.h#includestring.hvoid dtox(double num,int jz)char xnum100 ...

  2. 学习笔记7-C语言-进制转换、原返补、位运算、函数

    进制转换 为什么要使用二.八进制.十六进制?因为现在的CPU只能识别高低两种电流,因此只能对二进制数据进行运算二进制数据虽然可以直接被cpu识别,但不方便人们书写.记录,所以把二进制数据转换成八进制是 ...

  3. c语言进制转换实验报告,c语言_各种进制转换.docx

    c语言_各种进制转换.docx c 语言 各种进制转换 计算机中常用的数的进制主要有二进制.八进制.十六进制. 2 进制,用两个阿拉伯数字0.1: 8 进制,用八个阿拉伯数字0.1.2.3.4.5.6 ...

  4. 数据结构c语言进制转换八进制,C语言数据结构中数制转换实例代码

    C语言数据结构中数制转换实例代码 数制转换是严蔚敏的数据结构那本书中的例子,但是那本书中的例子大都是用伪代码的形式写的,不是很容易理解和实现,对初学者造成了不小的困扰,在这里我们将其详尽的实现出来,以 ...

  5. C语言 进制转换(1-16进制)

    先输入需要转化的进制,再输入若干个需要转化的数(以0和负数结尾) 具体代码如下 #include <stdio.h> int main( ) { int n,m;int i, a[12]; ...

  6. 进制转换小数c语言代码,C语言进制转换小数负数皆可 代码求解释

    满意答案 #include void fun1(long a)//输出二进制数 { long p; if(a>0) { p=a%2;//取余 fun1(a/2);//递归取余 printf(&q ...

  7. c语言进制转换pdf下载,C语言 十六进制和十进制间的转换.pdf

    1.将十六进制转换为十进制. #include #include int main(void){ int convert(int,char *); int i,j ; char m[20]; prin ...

  8. C语言进制转换时自动扩展位?(原码、反码、补码)(打印%o、%x时会自动扩展到32位【负数先得到其十进制真实数值,再根据其真实数值得到八进制、十进制补码】)

    文章目录 解析(char a = 0x81) 注意 解析(int b = 0x81) 解析(char c = -12) 懵逼

  9. c语言变量名必须用小写 常量用大写,day02 -C语言 常量 变量 数据类型 进制转换 数据溢出...

    常量 - 不会变化的数据 "hello" 'A' 10 3.14 #define PI 3.14 //采用宏定义的方法 定义一个常量 const int a = 10; 求圆的面积 ...

  10. c语言中10转8和16的转换,(C语言)10进制转换2,8,16进制

    (C语言)10进制转换2,8,16进制 作者:vinseven #include"stdio.h" #include"conio.h" #include&quo ...

最新文章

  1. AlertDialog对话框
  2. python-函数式编程
  3. C#测试程序运行时间
  4. python读取视频流做人脸识别_基于OpenCV和Keras实现人脸识别系列——二、使用OpenCV通过摄像头捕获实时视频并探测人脸、准备人脸数据...
  5. 构造数独 算法及代码实现
  6. 爱丁堡大学人工智能和计算机科学研究生申请入口
  7. mysql之 binlog维护详细解析(开启、binlog相关参数作用、mysqlbinlog解读、binlog删除)...
  8. php返回mysql错误语句_[已解决]php查询mysql返回了错误的结果
  9. 如何完善自己的知识结构
  10. gulp入坑系列(1)——安装gulp
  11. from PyQt4 import QtGui,QtCore出错-解
  12. python将excel导入mysql_Python将Excel数据自动导入MySQL,python,实现,excel,到,中
  13. webService(简单小demo)
  14. 页面加载时序问题----BUG分析
  15. 关于LoadRunner的Snapshots
  16. MySQL导出记录到Excel表格下载打开后乱码问题
  17. 5G NR标准: 第18章 射频特性
  18. 信息短信服务器发送失败怎么办,短信发送失败如何设置
  19. matlab利用已知数据画图三维,Matlab三维数据画图和等高线数据提取
  20. 京东、京东全球购、考拉等电商平台入驻费用详解

热门文章

  1. MyBatis官方文档——Java API部分
  2. mysql lock table阻塞读_MySQL的lock tables和unlock tables的用法【数据库锁表】
  3. 标准评分卡分数计算原理_学习评分卡Gini指标?这篇看完就够了!
  4. 【产品必备软件合集】
  5. 基于matlab的高等数学,基于matlab的高等数学实验详解.ppt
  6. H2 database 内存数据库 学习资料
  7. 修改SAP下载文件路径
  8. Python——飞机大战及源码下载
  9. 短期通过PMP考试?
  10. 大学C语言各章节练习题_及答案合集【350题】《选择题- 判断-程序填空-程序设计》