精华内容
下载资源
问答
  • 都在什么情况下使用'0x20' 是一个 multi-character character constant 它对应的值是0x30783230(注: '0' 'x' '2' 的 ascii 码分别是 0x30 0x78 0x32)'\x20' 是一个 char 它的值是0x20(注: '\x[0-9a-fA-F]{1,2}' 用16...

    如题,这两种表示方法有什么区别。都在什么情况下使用

    '0x20' 是一个 multi-character character constant 它对应的值是0x30783230(注: '0' 'x' '2' 的 ascii 码分别是 0x30 0x78 0x32)

    '\x20' 是一个 char 它的值是0x20(注: '\x[0-9a-fA-F]{1,2}' 用16进制表示一个char 比如 '\xFF'

    '\[0-7]{1,3}' 用8进制表示一个char 比如 '\100' )

    $ cat 1.c#include

    int main() {

    int a = '0x20';

    int b = '\x20';

    printf("a = 0x%x\n", a);

    printf("b = 0x%x\n", b);

    return 0;

    }

    $ gcc -Wall 1.c1.c:4:11: warning: multi-character character constant [-Wmultichar]

    int a = '0x20';

    ^

    $ ./a.outa = 0x30783230

    b = 0x20

    '\x2d' 主要是用来表是一个不能直接显示的单字节字符的编码

    '0x2d' 应该算是一个标准的16进制表示的字符串,可以通过int('0x2d', 16) 转换为int 类型的值

    你可以认为'0x2d'是语法错误,'\x2d'才是正确的写法。

    具体说'0x2d'不是一个char,而是一个int,它的值是0x30783264或者0x64327830,具体是哪个要看实现。

    C标准这么说:

    注意它提到了在C++里这个东西的type是char,据我所知至少VC支持这么写:'\xe5\xad\x97',这是一个UTF-8编码的"字"。

    '0x2d'是包含4个字符的字符串吧, '\x2d'表示字符'-'(其ASCII数值为0x2d=45)。

    玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/wenda/wd19681.html

    相关文章 Recommend

    展开全文
  • 众所周知, 内存地址空间是用16进制的数据表示, 如0x8049324, 那为什么需要用十六进制表示呢? 十六进制的意义何在?   编程中,我们常用的还是10进制.毕竟C/C++是高级语言。 比如:int a = 100,b = 99; ...

    众所周知, 内存地址空间是用16进制的数据表示, 如0x8049324, 那为什么需要用十六进制表示呢? 十六进制的意义何在?

     

    编程中,我们常用的还是10进制.毕竟C/C++是高级语言。   

    比如:int a = 100,b = 99;   

    不过,由于数据在计算机中的表示,最终以二进制的形式存在,所以有时候使用二进制,可以更直观地解决 问题。但二进制数太长了。比如int 类型占用4个字节,32位。比如100,用int类型的二进制数表达将是:   

    0000 0000 0000 0000 0110 0100   

    面对这么长的数进行思考或操作,没有人会喜欢。因此,C,C++ 没有提供在代码直接写二进制数的方法。用16进制或8进制可以解决这个问题。因为,进制越大,数的表达长度也就越短。

     

    不过,为什么偏偏是16或8进制,而不其它的,诸如9或20进制呢?2、8、16,分别是2的1次方,3次方,4次方。这一点使得三种进制之间可以非常直接地互相转换。8进制或16进制缩短了二进制数,但保持了二进制数的表达特点。
     

    十六进制的意义:
    1.用于计算机领域的一种重要的数制   

    2.对计算机理论的描述,计算机硬件电路的设计都是很有益的。比如逻辑电路设计中,既要考虑功能的完备,还要考虑用尽可能少的硬件,十六进制就能起到一些理论分析的作用。比如四位二进制电路,最多就是十六种状态,也就是一种十六进制形式,只有这十六种状态都被用上了或者尽可能多的被用上,硬件资源才发挥了尽可能大的作用。   

    3.十六进制更简短,因为换算的时候一位16进制数可以顶4位2进制数。

     

    十六进制的表示:
    C语言、Shell、Python语言及其他相近的语言使用字首“0x”,例如“0x5A3”。开头的“0”令解析器更易辨认数,而“x”则代表十六进制(就如“O”代表八进制)。在“0x”中的“x”可以大写或小写。

     

    然后再说内存:

    一个内存地址存着一个对应的值, 内存就相当于(addr,val)的大hash表,c语句的语义基本就是改变hash值。

    如 int i = 3; 
    假设 i的内存地址为 0x8049320 ,那么这句话的语义是0x8049320 = 3,经过i = 3后,i为(0x8049320,3)

    int b = i;
    假设 b的内存地址为 0x8049324 ,那么这句话的语义是0x8049324 = i对应的val = 3,此时b为(0x8049324,3)


    参考: 

    十六进制
    http://baike.baidu.com/view/230306.htm

    理解C指针: 一个内存地址对应着一个值 
    http://www.cppblog.com/hex108/archive/2011/06/18/124234.html

    作者:BobLiu 
    邮箱:lzd_ren@hotmail.com
    出处:http://www.cnblogs.com/liuzhendong
    本文版权归作者所有,欢迎转载,未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    展开全文
  • C语言允许程序员逐位操作变量,此时,最直观的数字表示方式自然是二进制。不过这样常常会让数字看起来“过长”,例如十...在C语言中,为什么十六进制的数字前缀用 0x 呢?在C语言中,为什么十六进制的数字前缀用 0...

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

    6d0628a6d17445a7b6d516a83eaf163a.png

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

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

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

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

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

    9c3527bd71bd7229077b83d105c7d205.png

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

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

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

    5000575ddb2d7cfea726f6311795b0f7.png

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

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

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

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

    小结

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

    0ca3a84d21009e50277b5da0c740bbc0.png

    点个赞再走吧

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

    未经许可,禁止转载。

    展开全文
  • 例题:python语言中整数1010的二进制、八进制和十六进制表示分别是什么? 首先我们要先认识二进制,八进制,十六进制的引导符号和定义形式: 进制种类 引导符号 描述 二进制 0b或0B 由字符0和1组成...

    例题:python语言中整数1010的二进制、八进制和十六进制表示分别是什么?

    首先我们要先认识二进制,八进制,十六进制的引导符号和定义形式:

    进制种类 引导符号 描述
    二进制 0b或0B 由字符0和1组成,如0b101、0B101
    八进制 0o或0O 由字符0到7组成,如0o711、0O711
    十六进制 0x或0X 由字符0到9、a到f、A到F组成,如0xABC

    十进制转二进制,八进制,十六进制,格式如下: 

    a = bin(1010) # 二进制
    b = oct(1010) # 八进制
    c = hex(1010) # 十六进制
    print a,b,c

     

    展开全文
  • 一个有趣的问题是,为什么十六进制数字以 0x 开头呢?这样做有什么历史渊源或者特别的好处吗?联想一下:C语言中的八进制是以前缀“0”开头的,例如04524就表示一个八进制数字,它等于十进制的2388。现在想象一下,...
  • 众所周知, 内存地址空间是用16进制的数据表示, 如0x8049324, 那为什么需要用十六进制表示呢? 十六进制的意义何在?   编程中,我们常用的还是10进制.毕竟C/C++是高级语言。 比如:int a = 100,b = 99; 不过,...
  • 十六进制、八进制、十进制、二进制,只是表示方法而已,在计算机里面用的都是二进制的,而十六进制恰好是2的4倍,表示一个字节的时候仅仅需要2个十六进制数就可以表示出来,因此多数用2个十六进制表示一个字符,看...
  • 以ViewGroup源码为例:static final int FLAG_CLIP_CHILDREN = 0x1;private static final int FLAG_CLIP_TO_PADDING = 0x2;static final int FLAG_INVALIDATE_REQUIRED = 0x4;private static final int FLAG_RUN_...
  • C语言允许程序员逐位操作变量,此时,最直观的数字表示方式自然是二进制。不过这样常常会让数字看起来“过长”,例如十...在C语言中,为什么十六进制的数字前缀用 0x 呢?在C语言中,为什么十六进制的数字前缀用 0...
  • 一个有趣的问题是,为什么十六进制数字以 0x 开头呢?这样做有什么历史渊源或者特别的好处吗?联想一下:C语言中的八进制是以前缀“0”开头的,例如04524就表示一个八进制数字,它等于十进制的2388。现在想象一下,...
  • 以ViewGroup源码为例:static final int FLAG_CLIP_CHILDREN = 0x1;private static final int FLAG_CLIP_TO_PADDING = 0x2;static final int FLAG_INVALIDATE_REQUIRED = 0x4;private static final int FLAG_RUN_...
  • 背景 最近从hbase中查询数据,用工具查询的时候...java和c对于16进制和8进制的数据表示方法都做了规定,16进制的数据有前缀0x,8进制的数据有前缀0. public class Test { public static void main(String[] args) {
  • 0x是16进制的前缀,H是16进制的后缀 ...都是表示十六进制数,意义上没有什么区别,完全相等。至于什么时候用0x什么时候用H,这取决于你在什么环境下使用,如果在C/C++,必须用0x表示。 在C语言中是不能用H的.
  • 0x16进制 编辑 讨论现实生活中,我们最常见的数为十进制数,比如交通信号灯上的...下面将带你了解一下十六进制数的秘密。中文名 0x16进制 基本概述 以0x开始的数据表示16进制 备 注 0是数字0,不是字母O 作 用 C/C+...
  • 进制以0b或者0B开头可用符号0、1负数在前面加符号-正确的值:0x10、0X11、-0x11错误的值:0x12需要注意的是这里0b或者0B开头表示的只是进制,而不是说该常量是byte类型,千万不要搞混了八进制以数字0开头可用符号0...
  • C语言允许程序员逐位操作变量,此时,最直观的数字表示方式自然是二进制。不过这样常常会让数字看起来“过长”,例如十...在C语言中,为什么十六进制的数字前缀用 0x 呢?在C语言中,为什么十六进制的数字前缀用 0...
  • 十六进制转换 在16进制中最大的数是15,那么我们来看看各个数字的表示方法,...90的十六进制0x5A (小写a大写A都可以) 发散: 1、为什么十六进制用4个二进制位表示嘛? 因为4个二进制位的最大值是15。 2、有32进制嘛?
  • 都是表示十六进制数,意义上没有什么区别,完全相等。至于什么时候用0x什么时候用H,这取决于你在什么环境下使用,如果在C/C++,必须用0x表示。 在C语言中是不能用H的. 在C语言里,整数有三种表示形式:十进制...
  • 都是表示十六进制数,意义上没有什么区别,完全相等。至于什么时候用0x什么时候用H,这取决于你在什么环境下使用,如果在C/C++,必须用0x表示。 在C语言中是不能用H的. 转载于:https://www.cnblogs.c...
  • 而不管他们是几进制,所以“2147483648”、“0x180000000(十六进制,共33位,所以超过了整数的取值范围)”字面常量是错误的,编译时会报超过int的取值范围了,所以要确定以long来表示“2147483648L”、“0x180000000...
  • 都是表示十六进制数,意义上没有什么区别,完全相等。至于什么时候用0x什么时候用H,这取决于你在什么环境下使用,如果在C/C++,必须用0x表示。 在C语言中是不能用H的. 在C语言里,整数有三种表示形式:十进制...
  • 十六进制转换

    2019-04-30 14:58:23
    0x16进制 编辑 讨论 现实生活中,我们最常见的数为十进制数,比如交通信号灯上的...下面将带你了解一下十六进制数的秘密。 中文名 0x16进制 基本概述 以0x开始的数据表示16进制 备 注 0是数字0,不是字母O 作 用 C/...
  • int number = 0xFF;字面值是指在程序中无需变量保存,可直接表示为一个具体的数字或字符串的值。0xFF是一个整数字面值,整...4位二进制可以表示1位十六进制,那么0x000000FF转换为二进制的写法就是:0000 0000 0000...
  • 我正在看Apache Commons库中的一段代码,想知道这些条件到底能做什么.public static byte[] decodeHex(final char[] data) throws DecoderException {final int len = data.length;if ((len & 0x01) != 0) { // ...
  • 十六进制0x开头,0-9,A代表10,B代表11,C代表12D13 共同点:都有基数,二进制基数是2,八进制基数是8,十进制基数是10,16进制基数是16 各个进制转换为10进制就是基数*位次幂 十进制转为二进制,除二求余法,从下...
  • 十六进制赋值

    2019-10-26 13:31:56
    之前学习浮点数,有一些特殊的值 比如说 正无穷大——符号位为0 阶码全为1 位数全为0 然后,我想看无穷大输出是什么样的,就做了这么个操作 ...//转化成二进制 0 11111111 00...0 想表示无穷大 cout<&...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 228
精华内容 91
关键字:

十六进制0x表示什么