精华内容
下载资源
问答
  • 不过这样常常会让数字看起来“过长”,例如十进制的 255 使用二进制表示为 11111111,因此,在C语言程序开发中,为了程序员阅读代码的方便,需要逐位操作变量时,常常使用十六进制。0xFF 看起来可比 0b11111111 直观...

    C语言允许程序员逐位操作变量,此时,最直观的数字表示方式自然是二进制。不过这样常常会让数字看起来“过长”,例如十进制的 255 使用二进制表示为 11111111,因此,在C语言程序开发中,为了程序员阅读代码的方便,需要逐位操作变量时,常常使用十六进制。0xFF 看起来可比 0b11111111 直观多了。

    14cc8a479eb43816ccae6c1484321060.png

    在C语言中,为什么十六进制的数字前缀用 0x 呢?

    在C语言中,为什么十六进制的数字前缀用 0x 呢?

    在C语言中,十六进制的数字常常以 0x 或者 0X 前缀开头,这是印在很多程序员骨子里的东西。一个有趣的问题是,为什么十六进制数字以 0x 开头呢?这样做有什么历史渊源或者特别的好处吗?

    联想一下:C语言中的八进制是以前缀“0”开头的,例如 04524 就表示一个八进制数字,它等于十进制的 2388。现在想象一下,怎样表示十六进制数字呢?能像汇编那样,在数字尾部添加后缀“h”吗?例如,80h 表示十六进制的 80(它等于十进制的 128)。

    不幸的是,十六进制数字还有 ABCDEF 字符,如果在某段C语言代码中,出现了字母开头的数字,例如 F0h,C语言编译器是将其解释为变量呢?还是数字呢?因此这样做并不是一个好的选择。

    545b46ebe5bced15c8ff0c9f9238189b.png

    这样做并不是一个好的选择

    类似的,还有将 h 放在数字前面,或者 x 放在数字前面表示十六进制,也会带来同样的问题。

    事实上,早在上世纪 60 年代,最流行的编程数字系统是十进制和八进制,那个时候的机器中每字节的位数是不确定的,有的机器中每字节有 12 位,还有 24 位,36 位的,可以很好地被 3=log2(8)整除。

    276eea2f4a210a9718a5af8489f634e5.png

    使用 0 前缀表示八进制数字

    BCPL 语言使用符号 8 1234 表示八进制数字,后来 Ken Thompson 根据 BCPL 语言创立了 B 语言,他修改了这一表示方法——使用 0 前缀表示八进制数字,这样的改进带来了一系列好处:

    • 对于编译器来说,整型常量总是可以由单个标记(token)组成。
    • 编译器仍然可以准确的识别出这是一个数字。
    • 编译器可以立即识别这是八进制数字。
    • 00005 和 05 是相等的。
    • 不需要使用特殊字符(例如1234表示)。

    后来 Thompson 从 B 语言创立C语言时,保留了这一特性。后来发现十六进制数字用起来很方便,选择了 0x 作为十六进制数字的前缀。

    小结

    简单来说,十六进制的前缀 0x 或者 0X 中的 0 是用于告诉编译器这是一个数字,这有一点点历史渊源在里面,也有一些好处。而 x 则可以认为是任意选择的符号(hexcimal)了。

    6b097d764124aa6df971654432859c6f.png

    点个赞再走吧

    欢迎在评论区一起讨论,质疑。文章都是手打原创,每天最浅显的介绍C语言、linux等嵌入式开发,喜欢我的文章就关注一波吧,可以看到最新更新和之前的文章哦。

    未经许可,禁止转载。

    展开全文
  • ![图片说明](https://img-ask.csdn.net/upload/201503/28/1427512138_82235.png)
  • 导读 这一章节介绍的是进制数的运算,进制数的运算在计算机中非常重要,我们的C语言程序操作的就是内存和字节,那么对进制数的运算就非常频繁,所以掌握进制数的运算规则和各个进制数所能够表示的范围就变得更加重要...
    50eefe1d321db9f024fe5c4c7f19c9b2.png

            这一章节介绍的是进制数的运算,进制数的运算在计算机中非常重要,我们的C语言程序操作的就是内存和字节,那么对进制数的运算就非常频繁,所以掌握进制数的运算规则和各个进制数所能够表示的范围就变得更加重要。

            在介绍进制数之前,我们简单的了解一下计算机的发展历史,了解一下计算机的工作原理,这对我们后面的学习会有一定的帮助,当然,如果想要掌握更多的内容,可以去查阅相关的书籍。

            进制数的运算主要包括以下一些内容:

            十进制数如果分别用二进制数、八进制数和十六进制数表示

            二进制数和十进制数的相互转换

            二进制数和八进制数之间的相互转换

            二进制数和十六进制数之间的相互转换

            然后是最重要的一部分内容,原码、反码和补码的运算规则,对于各种码制的运算中,需要注意哪些问题,以及各种码制所能够表示的数据范围如何求解。

            最后简单的介绍一下二进制数的位运算

    50eefe1d321db9f024fe5c4c7f19c9b2.png

            下面是本次课程的PPT,可以对照着课程和视频学习。

    f6bf8866d0db739d9787d4f6165e94a0.png

    2edf4d5557c333eb9d90af992c89953f.png

    4094f56ab53888ac2b6ed43f15ad014c.png

    8b3f122cd4512ecd7c03eeff5740bd65.png

    a6b3f3ce83a7934d60d1faceb0bc63d1.png

    97c1a9b9c1bc2edc05839183d9523b17.png

    d5f5814b9abe0649b5c8442d759e993a.png

    d6f2fae0f5cb1fc2220ac83a10cfae47.png

    e6889a96243cdc78ae63dbdf1c5e7966.png

    64a14f48ae0cd823c665f58e8134e394.png

    df1efb9241877d9f58657eaface8880d.png

    fffd6d545b4417da7be227b4ac4cb891.png

    026ebbd7daed24018b5cb065c9a4f047.png

    28e499a768fe245b1cdebfd7c6e6024c.png

    b2bee116353d4b0d38502477ee57d813.png

    78c46600a8f4a04edc9d6b65e1a93ab4.png

    2c8fc2a9ce6bdb7cd079add2b1507f11.png

    e0e1b77e51ce33b52776fd2d0c79cc36.png

    展开全文
  • c语言进制表示

    2019-12-30 21:47:55
    c语言中各种进制表示方法: 二进制 据我所知,c/c++中没有二进制字面常量的表示方法(大概因为所有的数据本来就是以二进制存放的) 八进制 04567 注意是前面的是数字0 十进制 没啥说的。。。。。。什么?你不会写,你...

    c语言中各种进制表示方法:

    二进制 据我所知,c/c++中没有二进制字面常量的表示方法(大概因为所有的数据本来就是以二进制存放的)

    八进制 04567 注意是前面的是数字0

    十进制 没啥说的。。。。。。什么?你不会写,你是火星人吧!

    十六进制 0x9adf 注意0x前缀

    展开全文
  • 了解位的基本概念熟悉二进制数的运算方法掌握各种位运算的方法和技巧熟悉位段的基本概念掌握位段中数据的引用方法掌握数值的转换方法和技巧C语言区别于其他语言的重要特点是支持位运算,使其能够完成汇编语言所能...

    0cc58aa454a629338f4f72a688a2b11c.gif

    了解位的基本概念

    熟悉二进制数的运算方法

    掌握各种位运算的方法和技巧

    熟悉位段的基本概念

    掌握位段中数据的引用方法

    掌握数值的转换方法和技巧

    C语言区别于其他语言的重要特点是支持位运算,使其能够完成汇编语言所能完成的大部分功能。在实际的编程中借助与位运算往往可以设计出简洁的算法,使程序简化,并且获得较高的效率。另外,某些对硬件进行控制的编程中,位运算也是必不可少的。

    位运算应用于整型数据,即把整型数据看成是固定的二进制序列,然后对这些二进制序列进行按位运算。与其他的高级语言相比,位运算是C语言的特点之一,在实际应用中可逐步体会其优越性。

    二进制就是逢二进一,比如十进制数3转换为二进制数11,十进制数10转换为二进制数1010。要把二进制数转换为十进制数,可以使二进制数字的每一位对应一个2的某次幂,然后累加求和。

    我们把二进制数中的每一个二进制数称为位(bit,比特),每个0或1就是一位,位是数据存储的最小单位。

    通常,我们把一组4位二进制数称为半字节(nibble),一组8位二进制数称为一个字节(byte)。通常把两个或者4个字节称为一个字(word),两个字又称之为一个双字(double word)。

    为了简单起见,这里以一个字节为例,来说明无符号数和有符号数。需要注意的是:在Microsoft Visual C++ 6.0中,整型int用4个字节32位表示一个有符号整数。

    位或运算符

    按位异或运算符

    按位取反运算符

    左移运算符

    右移运算

    位复合赋值运算符

    按位或运算是让参与运算的两个数对应的二进制位分别相或。只要对应的两个二进制位有一个为1,结果就为1;只有当对应的两个二进制位的数都为0时,该位的运算结果才为0.。

    按位异或运算是让参与运算的两个数对应的二进制位分别相异或,当两个对应的二进制位不同时,结果为1,两个对应的二进制位相同时,结果为0。

    按位异或运算的主要应用:

    1. 使特定位翻转。

    2. 与0按位异或,保留原值。

    3. 交换两个值,不需要临时变量。

    按位取反运算符为单目运算符,运算对象就置于运算符的右边,具有右结合性。其功能是把运算对象的内容按位取反,即1变为0,将0变为1。例如~9的运算表示为:

    ~(00001001)

    结果为:11110110

    左移运算用来把“<

    int  a=8,b;

    b=a<<3;

    用二进制表示运算过程如下:

    a:     00001000  (a=8)

    b=<<3: 01000000  (b=64)

    右移运算符用来把“>>”左边的运算数的各二进制位全部右移若干位,移动的位数由“>>”右边的数字指定。右移时,低位移出的二进制数舍弃,左端移入的二进制数分两种情况:对于无符号整数和正整数,高位补0,对于负整数,高位补1,这是因为负数在机器内均用补码表示。

    例如:

    int  a=15;

    a>>2;

    表示把00001111(十进制15)右移2位后变为00000011(十进制3)。

    右移时要注意符号位,对于有符号的数,右移时符号位将一同移动。当为正数时(符号位为0),最高位补0;为负数时(符号位为1),最高位是补0还是补1取决于编译系统的规定。有的系统移入0,有的系统移入1,移入0的称为“逻辑右移”,即简单右移。移入1的称为“算术右移”。

    位运算符与赋值运算符可以组成复合赋值运算符,如:

    &=,|=,>>=,<<=,^=

    例如:a|=b相当于a=a|b,a>>=b相当于a=a>>b。

    由前可知,位运算的对象可以是整型和字符型数据,当两个运算数类型不同时位数也不同,此时,系统将自动进行处理:先将两个运算数右端对齐,然后,再将位数短的一个运算数往高位扩充,即:无符号数和正整数左侧用0补全;负数左侧用1补全,然后对位数相等的这两个数,按位进行运算。

    位段的定义

    位段中数据的引用

    位段定义的一般形式为:

    struct 位段结构名

    {位段列表};

    其中“位段列表”的形式为:  类型说明符  位段名:位段长度

    位段变量的说明与结构体变量说明的方式相同。可采用先定义后说明、同时定义说明或直接说明这三种方式。例如:

    struct  dz

    {

    unsigned  a:3;

    unsigned  b:2;

    unsigned  c:2;

    }data;

    其中位段a占3位,位段b占2位,位段c占2位。

    位段中数据引用的一般形式:    位段变量.位段成员

    例如:data.a=3;

    说明:

    位段成员的类型只能是unsigned或int类型。

    一个位段必须存储在同一个存储单元中,不能跨两个单元。即如果一个单元空间不能容纳一个位段,则该空间不用,而从下一个单元起存放该位段。也可以有意使某位段从下一单元开始存放。

    由于位段不允许跨两个字节,因此位域的长度不能大于一个字节的长度,也就是说不能超过8位二进制位。

    可以定义无名位段,这时它只用来作填充或调整位置,无名的位段是不能够使用的。

    位段的长度不能大于存储单元的长度,也不能定义位段数组。

    位段可以用整型格式符输出,也可以用%u、%o、%x等格式输出。

    位段可以在数值表达式中引用,它会被系统自动转换为整型数。

    6c1da77eae2b41ac1091cff5dc0145a3.png

    展开全文
  • C语言中表示数时经常提到二进制、八进制、十进制和十六进制表示。为方便理解,先介绍十进制。十进制:是指由0,1,2,3,4,5,6,7,8,9 十个数字表示的数,逢十进位,因此是十进制,可以看出十进制没有单独数字10,因为不...
  • C语言二进制除法用左右移位来表示.txt
  • 二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,如:8位二进制数:...c语言中十六进制数前加“0x”表示,例如:十六进制:0x35 转换为二进制数为:00110101
  • 一、数据类型除void类型以外,基本的数据类型之前都可以加各种各类修饰符。在基本类型前加类型修饰符可以更加...signed的重要用途是在char类型默认为无符号时,使用signed修饰char,表示有符号字符型。2)unsigned...
  • 点击蓝字关注我们昨天的C语言基础入门知识了解了吗~今天我们一起来学习C语言中的常量与变量吧准备好小本本一起来学习C语言吖~常量含义值保持不变的量 (就算强行赋值也不改变!)(倔强的常量)表示方法#define 定义符号...
  • C语言 二进制转任意进制

    千次阅读 2017-06-28 13:38:53
    将输入的0和1数字序列表示二进制数转换为八进制、十六进制数。 (2)功能要求 ①将输入的0和1数字序列存放到数组中。 ②从终端输入要转换的进制。 ③将转换后的结果保存到数组中,并以适当的形式输出。 ④若...
  • 二进制逢二进一,每一位数字数用0或者1来表示。0 1 10 11 100 101 110 111 1000在C语言中,如果要写一个二进制的数,那么就在二进制数前面加一个0b的前缀。二进制的每一位是0或者1,逢二进一C语言中写一个二进制数据...
  • 我们平时使用的数字都是由 0~9 共十个数字组成的,例如 1、9、10、297、952 等,一个数字最多能表示九,如果要表示十、 十一、十九、一百等,就需要多个数字组合起来。 例如表示 5+8 的结果,一个数字不够,只能...
  • 不过,由于数据在计算机中的表示,最终以二进制的形式存在,所以有时候使用二进制,可以更直观地解决问题。但,二进制数太长了。比如int 类型占用4个字节,32位。比如100,用int类型的二进制数表达将是:0000 0000...
  • C语言二进制文件处理

    2012-10-30 22:51:53
    "rb"不是说打开二进制文件,而是说以二进制的方式来打开文件,任何文件都可以用二进制的方式打开,所以我觉得这里没有问题。然后你的问题中说每次读取两个字节,但是每个ASCII码的值只是用一个字节来表示的,所以我...
  • 在实际开发中,我们可以用0和1的字符串来表达信息,例如某设备有八个传感器,每个传感器的状态用1表示正常,用0表示故障,用一个二进制的字符串表示它们如01111011,用一个字符或整数表示它就是123。 1、十进制转...
  • 注:本文所有代码均经过Python 3.7实际运行检验,...Python语言一样可以用二进制、八进制和十六进制来表示整数,与十进制表示法不同,这些进制法的表示需要在整数字面值加一个前缀即可。 十进制demical——无前缀。...
  • 给出一个十进制的正整数,输出它的二进制表示。 输入 有多行数据,每一行一个正整数,整数值在[1-100000000]之间。 输出 输出相应的二进制数.每一行输出对应每一行输入 样例输入 Copy 3 4 样例输出 Copy 11 100 我...
  • 通常,二进制数被用于描述计算机内存的内容;有时也使用十进制和十六进制数。所以必须熟练掌握数字格式,以便快速地进行数字的格式转换。每一种数制格式或系统,都有一个基数(base),也就是可以分配给单一数字的最大...
  • 十进制转换成二进制C语言程序 能够详细明了的表示出来 
  • 对于刚开始学习C语言的来说,我们知道%d可以表示十进制的数,%o可以表示八进制的数,%x用来表示十六进制的数,但却没有来表示二进制数的。 这就是相对应的八进制数和十六进制数#include &lt;stdio.h&gt; ...
  • 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 输入: 输入可能包含多个测试样例。对于每个输入文件,第一行输入一个整数T,代表测试样例的数量。对于每个测试样例输入为一个整数。。n保证...
  • C语言 二进制文件的读取

    千次阅读 2014-12-23 15:19:12
    这里边字符为了表示方便直接用16进制表示二进制的原理相同。 #include "stdio.h" #include "stdlib.h" #include "string.h" //数据以16进制的形式写入文件。void writeFile16() { int i=0; char buf...
  • 一般用数字0到9和字母A到F(或a~f)表示,其中:A~F表示10~15。 十进制(Decimal System):每相邻的两个计数单位之间的进率都为十;十进制是中华民族的一项杰出创造,在世界数学史上有重要意义。著名的英国科学史学...
  • 1、二进制 用0、1两个数字来表示数值,这就是二进制(Binary)。通俗讲,二进制只有0和1,。例如,数字 0、1、10、111、100、1000001 都是有效的二进制。在计算机内部,数据都是以二进制的形式存储的,二进制是学习编程...
  • C语言进制知识汇总

    2021-01-20 07:05:52
    对于任何一个数字,我们都可以用不同的进制来表示,比如,十进制数12,用二进制表示为1100,用八进制表示为14,用十六进制表示为0xC。 2.进制的转换规则 遵循满进制值进1位,个位数变为0的原理,下面我们以十进制数...
  • 类题:DS18B20 温度传感器中的温度转换! 1、保留了两位小数点 value   =t*0.0625;  t =value * 100;   t = 1/16 * 100 = 25/4; 相当于  t = (t )+(t )+ t ; 16 8 1   刚好为 25  t = t>>2;...
  • 对于两个非负整数x 和y,函数f(x,y) 定义为x 和y 在二进制表示时,其对应位不同的个数。例如,f(2,3)=1, f(0,3)=2, f(5,10)=4。 现在给出一组非负整数x 和y,计算f(x,y)的值。 Input 第一行:一个整数T (0 ),...
  • c语言输出二进制表示

    2020-03-14 16:51:01
    //len:输出byte个数 void printBinary(unsigned char * str, u8 *a,int len) { printf("%8s:\n", str); int i,j; u8 t; for (i = 0; i < len; i++) { t = a[i]; printf("0x%02x : ",t);... j <...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,497
精华内容 998
关键字:

c语言二进制表示

c语言 订阅