c语言中0x12是什么进制,C语言中进制知识汇总
1.什么是进制
进制是一种计数的方式,常用的有二进制、八进制、十进制、十六进制。任何数据在计算机内存中都是以二进制的形式存放的。
我对进制的个人理解,二进制数是以2为计算单元,满2进1位的数;八进制数是以8为计算单元,满8进1位的数。
对于任何一个数字,我们都可以用不同的进制来表示,比如,十进制数12,用二进制表示为1100,用八进制表示为14,用十六进制表示为0xC。
2.进制的转换规则
遵循满进制值进1位,个位数变为0的原理,下面我们以十进制数18为例,对1-18中每一个数值转换各种进制做一个详细说明
转二进制:
1小于2,无需进1位,1的二进制值是1
2为二进制值1后面一个数,由于1+1满2,需要进1位,个位数变为0,所以2的二进制值是10
3为二进制值10后面一个数,由于11的个位数1小于2,无需进1位,所以3的二进制值是11
4为二进制值11后面一个数,由于11的个位数1+1满2,需要进1位,而二进制值11的位数1+1又满2,所以位数加1,最终转换结果为100
转换思路:二进制值11+1 ->10+(1+1)(个位等于2,进1位,个位数变为0) ->(1+1)+0(位数满2,进1位) -> 100
以此类推,最终十进制数18的二进制转换结果是10010
转八进制:
1-7小于8,无需进1位,1-7的八进制由1-7表示
8为八进制值7后面一个数,由于7+1满8,需要进1位,个位数变为0,所以8的八进制值是10
以此类推,最终十进制数18的八进制转换结果是22
转十六进制
十六进制中,个位数1-15分别为1 2 3 4 5 6 7 8 9 a b c d e f (a=10....f=15)
16为十六进制值c后面1个数,由于c+1满16,需要进1位,个位数变为0,所以16的十六进制是10。
最终十进制数18的十六进制转换结果是12
详细结果如下图所示(C语言把数字前面加0x的数认为是十六进制数)
3.C语言中int类型进制的声明以及占位符
虽然以下3个变量的赋值方式不同,但实际赋值结果都是18
复制代码 代码如下:
//二进制类型数字加0b int number1 = 0b10010; //八进制类型数字加0 int number2 = 022; //十六进制类型数字加0x int number3 = 0x12;
八进制占位符:%o
十六进制占位符:%x
4.内存存储数据细节
我们知道,int类型数据占据4个字节,1个字节是8bit。并且任何数据在计算机内存中都是以二进制的形式存放的,所以内存需要用32个0或1来描述1个int类型数据。
由于18的二进制数是10010,我们将一个int类型变量赋值18,本质上是将这个变量的内存地址对应的32个bit位修改为:
0000 0000 0000 0000 0000 0000 0001 0010(未满31位,后面的数字用0填充:为什么是31而不是32呢,后面会介绍)
假设我们定义两个变量
//二进制类型数字加0b
int number1 = 0b10010;
//八进制类型数字加0
int number2 = 022;
//十六进制类型数字加0x
int number3 = 0x12;
计算机会根据内存地址以由大到小的顺序进行分配内存空间,具体如下图所示:
5.进制的转换公式
二进制转十进制
0b1100 ->0*2的0次方 + 0*2的1次方 + 1*2的2次方 + 1*2的3次方 = 12
十进制转二进制
67 ->64+2+1 ->2的6次方+ 2的1次方 + 2的0次方 = 0b1000011
6.进制的其他知识
1.n位二进制能保存的整数范围公式:2的n次方-1
例如,3位的二进制数最大值为111,对应的十进制数字为7;5位的二进制数最大值为11111,对应的十进制数字为(2*2*2*2*2)-1 = 31。
2.负数的二进制保存规则是最左边的数字是1。例如,0000 0000 0000 0000 0000 0000 0001 0010 表示正整数,1111 1111 1111 1111 1111 1111 1110 1101表示负数
由此,我们就能推测出,int类型能保存的最大整数是2的(32-1)次方-1 =2147483647。为什么要用32-1,很简单,32个bit中,必须抽1个bit位用来描述这个数字是正数还是负数。
c语言中0x12是什么进制,C语言中进制知识汇总相关推荐
- c语言中什么函数可以作为虚函数,C++语言中的“虚函数”就像C语言中的指针,必须要弄懂的...
上一节较为详细的讨论了C++语言中基类被派生类继承过程中的内存模型,尤其较为详细的分析了虚函数及其虚表.虚表指针在内存中是如何分布,如何存储的,这对于理解C++语言中的"动态绑定" ...
- c语言中5l是数值或字符常量,C语言中什么叫做正确的数值或字符常量?
用一对单引号将一个字符括起表示合法的字符常量.例如'a'.数值包括整型.浮点型.整型可用十进制,八进制,十六进制.八进制前面要加0,后面由0到7八个数表示. 在C语言中,字符常量有以下特点: 字符常量 ...
- matlab for判断语句,matlab使用笔记(一)——matlab语言中if、for语句与C语言中的差别...
好久没用matlab编写程序,上周在亲导师面前,愣生生是2小时没编出一选择函数的程序.羞愧至极,愤而写之.主要内容是matlab语言中与c语言中if.for语句的差别. 突然插一下!!!end.end ...
- c语言中eof的作用,深入解读C语言中的符号常量EOF
EOF是指文件的结束符,是一个宏定义 借助于getchar 与putchar 函数,可以在不了解其它输入/输出知识的情况下编写出 数量惊人的有用的代码.最简单的例子就是把输入一次一个字符地复制到输出, ...
- C语言中lwr是谁的缩写,C语言中关于字符串的操作(转)
浅析C语言中关于字符串的操作(转) 前言:如果您是学C/C 的,对于字符串的操作不是很了解,请您耐心读完.作为我的朋友,我很乐意和您分享我最近的知识积累.毕 竟,网上很少有这么全,这么细的介绍,更少有 ...
- r语言中popsd和sd的区别_R语言中回归和分类模型选择的性能指标
有多种性能指标来描述机器学习模型的质量.但是,问题是,对于哪个问题正确的方法是什么?在这里,我讨论了选择回归模型和分类模型时最重要的性能指标.请注意,此处介绍的性能指标不应用于特征选择,因为它们没有考 ...
- C语言中tan函数的参数,C++_C语言中正切的相关函数总结,C语言tan()函数:正切函数
头 - phpStudy...
C语言中正切的相关函数总结 C语言tan()函数:正切函数头文件: #include tan() 函数用来求给定值的正切值,其原型为: double tan(double x); [参数]x 为给定的 ...
- c语言中int x=0101,二进制安全_C语言中数据类型
1.C语言中的数据类型: 2.学习数据类型的三个要素: 1.存储数据的宽度 2.存储数据的格式 3.作用范围(作用域) 3.整数类型:char short int long char 8BIT 1字节 ...
- 在c语言中sqrt如何用,sqrt在c语言中怎么用?
sqrt()函数在c语言中用于计算一个非负实数的平方根:其语法为"double sqrt(double)".在sqrt()函数中没有"sqrt (int)",但 ...
最新文章
- 面试官眼中的计算机水平,面试官最不喜欢的五句话,千万别说了
- oracle Ratio_to_report的用法
- python基础day4
- 重采样算法实践 --- (一)
- 46. Ext中namespace的作用(转)
- maven 引入net.sf.json-lib依赖时报错(classifier)
- 如何处理SAP Fiori gateway service使用过程中遇到的404 error
- HTML5程序开发范例宝典 完整版 (韩旭等著) 中文pdf扫描版
- hoj 1640 Mobile phones //poj 1195 Mobile phones 二维树状数组
- Linux 简单的双线设置
- Java 实现MD5
- 麻省理工18年春软件构造课程阅读03“测试”
- java数组表示方法_Java中数组总结
- Linux嵌入式开发必读推荐书籍
- 华为要开发人工智能手机 魅族新机发布会却被调侃不用开了!
- python读取oracle数据库中文乱码_PL/SQL连接Oracle数据库,中文乱码,显示问号
- 第六章 深入理解Magento – 高级Magento模型(EAV)
- 程序员才看得明白的面试圣经
- 【SpringBoot】72、SpringBoot中接入轻量级分布式日志框架Graylog
- JAVA基础入门教程——Java介绍