-
python十六进制去掉0x_python内十六进制形式下的'0x2d'和'\x2d'如何理解
2021-01-29 14:19:43都在什么情况下使用'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
-
内存地址空间与十六进制,为什么需要八进制和十六进制? 十六进制的意义何在
2016-05-03 11:28:02众所周知, 内存地址空间是用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指针: 一个内存地址对应着一个值
作者:BobLiu
http://www.cppblog.com/hex108/archive/2011/06/18/124234.html
邮箱:lzd_ren@hotmail.com
出处:http://www.cnblogs.com/liuzhendong
本文版权归作者所有,欢迎转载,未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 -
c语言中十进制与十六进制转换_有趣的问题,C语言中的十六进制数字为什么以前缀0x开头呢?...
2021-01-19 04:35:01C语言允许程序员逐位操作变量,此时,最直观的数字表示方式自然是二进制。不过这样常常会让数字看起来“过长”,例如十...在C语言中,为什么十六进制的数字前缀用 0x 呢?在C语言中,为什么十六进制的数字前缀用 0...C语言允许程序员逐位操作变量,此时,最直观的数字表示方式自然是二进制。不过这样常常会让数字看起来“过长”,例如十进制的 255 使用二进制表示为 11111111,因此,在C语言程序开发中,为了程序员阅读代码的方便,需要逐位操作变量时,常常使用十六进制。0xFF 看起来可比 0b11111111 直观多了。
在C语言中,为什么十六进制的数字前缀用 0x 呢?
在C语言中,为什么十六进制的数字前缀用 0x 呢?
在C语言中,十六进制的数字常常以 0x 或者 0X 前缀开头,这是印在很多程序员骨子里的东西。一个有趣的问题是,为什么十六进制数字以 0x 开头呢?这样做有什么历史渊源或者特别的好处吗?
联想一下:C语言中的八进制是以前缀“0”开头的,例如 04524 就表示一个八进制数字,它等于十进制的 2388。现在想象一下,怎样表示十六进制数字呢?能像汇编那样,在数字尾部添加后缀“h”吗?例如,80h 表示十六进制的 80(它等于十进制的 128)。
不幸的是,十六进制数字还有 ABCDEF 字符,如果在某段C语言代码中,出现了字母开头的数字,例如 F0h,C语言编译器是将其解释为变量呢?还是数字呢?因此这样做并不是一个好的选择。
这样做并不是一个好的选择
类似的,还有将 h 放在数字前面,或者 x 放在数字前面表示十六进制,也会带来同样的问题。
事实上,早在上世纪 60 年代,最流行的编程数字系统是十进制和八进制,那个时候的机器中每字节的位数是不确定的,有的机器中每字节有 12 位,还有 24 位,36 位的,可以很好地被 3=log2(8)整除。
使用 0 前缀表示八进制数字
BCPL 语言使用符号 8 1234 表示八进制数字,后来 Ken Thompson 根据 BCPL 语言创立了 B 语言,他修改了这一表示方法——使用 0 前缀表示八进制数字,这样的改进带来了一系列好处:
- 对于编译器来说,整型常量总是可以由单个标记(token)组成。
- 编译器仍然可以准确的识别出这是一个数字。
- 编译器可以立即识别这是八进制数字。
- 00005 和 05 是相等的。
- 不需要使用特殊字符(例如1234表示)。
后来 Thompson 从 B 语言创立C语言时,保留了这一特性。后来发现十六进制数字用起来很方便,选择了 0x 作为十六进制数字的前缀。
小结
简单来说,十六进制的前缀 0x 或者 0X 中的 0 是用于告诉编译器这是一个数字,这有一点点历史渊源在里面,也有一些好处。而 x 则可以认为是任意选择的符号(hexcimal)了。
点个赞再走吧
欢迎在评论区一起讨论,质疑。文章都是手打原创,每天最浅显的介绍C语言、linux等嵌入式开发,喜欢我的文章就关注一波吧,可以看到最新更新和之前的文章哦。
未经许可,禁止转载。
-
python语言中整数1010的二进制、八进制和十六进制表示分别是什么?
2019-04-17 20:25:29例题: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
-
c语言中平均值用什么表示_C语言十六进制前缀为什么用 0x 呢?
2021-01-19 04:35:14一个有趣的问题是,为什么十六进制数字以 0x 开头呢?这样做有什么历史渊源或者特别的好处吗?联想一下:C语言中的八进制是以前缀“0”开头的,例如04524就表示一个八进制数字,它等于十进制的2388。现在想象一下,... -
内存地址空间与十六进制,为什么需要八进制和十六进制? 十六进制的意义何在?...
2011-10-17 17:20:00众所周知, 内存地址空间是用16进制的数据表示, 如0x8049324, 那为什么需要用十六进制表示呢? 十六进制的意义何在? 编程中,我们常用的还是10进制.毕竟C/C++是高级语言。 比如:int a = 100,b = 99; 不过,... -
在定义int类型的变量时,使用十六进制表示有什么好处?
2019-05-15 19:54:49十六进制、八进制、十进制、二进制,只是表示方法而已,在计算机里面用的都是二进制的,而十六进制恰好是2的4倍,表示一个字节的时候仅仅需要2个十六进制数就可以表示出来,因此多数用2个十六进制来表示一个字符,看... -
java 十六进制好处_在定义int类型的变量时,使用十六进制表示有什么好处?
2021-02-26 21:10:47以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开头呢?...
2020-11-28 13:03:30C语言允许程序员逐位操作变量,此时,最直观的数字表示方式自然是二进制。不过这样常常会让数字看起来“过长”,例如十...在C语言中,为什么十六进制的数字前缀用 0x 呢?在C语言中,为什么十六进制的数字前缀用 0... -
c语言goto为什么最好不要用_C语言十六进制前缀为什么用 0x 呢?
2020-11-28 13:03:21一个有趣的问题是,为什么十六进制数字以 0x 开头呢?这样做有什么历史渊源或者特别的好处吗?联想一下:C语言中的八进制是以前缀“0”开头的,例如04524就表示一个八进制数字,它等于十进制的2388。现在想象一下,... -
java 写成十六进制和好处_在定义int类型的变量时,使用十六进制表示有什么好处?...
2021-03-15 04:12:42以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_... -
java 八进制和十六进制的表示
2020-12-09 10:31:24背景 最近从hbase中查询数据,用工具查询的时候...java和c对于16进制和8进制的数据表示方法都做了规定,16进制的数据有前缀0x,8进制的数据有前缀0. public class Test { public static void main(String[] args) { -
0x和H都表示十六进制有什么区别吗?
2016-07-21 11:32:070x是16进制的前缀,H是16进制的后缀 ...都是表示十六进制数,意义上没有什么区别,完全相等。至于什么时候用0x,什么时候用H,这取决于你在什么环境下使用,如果在C/C++,必须用0x来表示。 在C语言中是不能用H的. -
c++ 十六进制字符转换十进制_十六进制转换
2020-12-29 04:34:080x16进制 编辑 讨论现实生活中,我们最常见的数为十进制数,比如交通信号灯上的...下面将带你了解一下十六进制数的秘密。中文名 0x16进制 基本概述 以0x开始的数据表示16进制 备 注 0是数字0,不是字母O 作 用 C/C+... -
java中八进制常量是什么意思_java 二进制常量、八进制常量、十进制常量、十六进制常量表示方法...
2021-03-14 14:55:04二进制以0b或者0B开头可用符号0、1负数在前面加符号-正确的值:0x10、0X11、-0x11错误的值:0x12需要注意的是这里0b或者0B开头表示的只是进制,而不是说该常量是byte类型,千万不要搞混了八进制以数字0开头可用符号0... -
在程序中表示什么_有趣的问题,C语言程序中,为什么十六进制数字以前缀0x开头呢?...
2021-01-13 17:41:09C语言允许程序员逐位操作变量,此时,最直观的数字表示方式自然是二进制。不过这样常常会让数字看起来“过长”,例如十...在C语言中,为什么十六进制的数字前缀用 0x 呢?在C语言中,为什么十六进制的数字前缀用 0... -
java程序中的进制(进制的转换十六进制和八进制)
2017-05-01 00:17:31十六进制转换 在16进制中最大的数是15,那么我们来看看各个数字的表示方法,...90的十六进制0x5A (小写a大写A都可以) 发散: 1、为什么十六进制用4个二进制位表示嘛? 因为4个二进制位的最大值是15。 2、有32进制嘛? -
区别八进制,十进制,十六进制在C语言中的表示方法
2019-09-06 11:12:31都是表示十六进制数,意义上没有什么区别,完全相等。至于什么时候用0x,什么时候用H,这取决于你在什么环境下使用,如果在C/C++,必须用0x来表示。 在C语言中是不能用H的. 在C语言里,整数有三种表示形式:十进制... -
[转载]十六进制数的两种不同表示:0x和H
2019-06-29 12:37:00都是表示十六进制数,意义上没有什么区别,完全相等。至于什么时候用0x,什么时候用H,这取决于你在什么环境下使用,如果在C/C++,必须用0x来表示。 在C语言中是不能用H的. 转载于:https://www.cnblogs.c... -
java中八进制常量是什么意思_Java 负的十六进制与八进制字面常量
2021-03-14 14:55:21而不管他们是几进制,所以“2147483648”、“0x180000000(十六进制,共33位,所以超过了整数的取值范围)”字面常量是错误的,编译时会报超过int的取值范围了,所以要确定以long来表示“2147483648L”、“0x180000000... -
C/C++中的二进制,十进制,十六进制
2021-02-19 16:31:40都是表示十六进制数,意义上没有什么区别,完全相等。至于什么时候用0x,什么时候用H,这取决于你在什么环境下使用,如果在C/C++,必须用0x来表示。 在C语言中是不能用H的. 在C语言里,整数有三种表示形式:十进制... -
十六进制转换
2019-04-30 14:58:230x16进制 编辑 讨论 现实生活中,我们最常见的数为十进制数,比如交通信号灯上的...下面将带你了解一下十六进制数的秘密。 中文名 0x16进制 基本概述 以0x开始的数据表示16进制 备 注 0是数字0,不是字母O 作 用 C/... -
java+0x3e+是什么_在Java中,为什么十六进制数0xFF取反之后对应的十进制数是-256呢?...
2021-03-11 14:52:08int number = 0xFF;字面值是指在程序中无需变量保存,可直接表示为一个具体的数字或字符串的值。0xFF是一个整数字面值,整...4位二进制可以表示1位十六进制,那么0x000000FF转换为二进制的写法就是:0000 0000 0000... -
java 0x0001 表示多少_java-解码十六进制:这行是做什么的(len&0x01)!= 0
2021-03-13 01:39:21我正在看Apache Commons库中的一段代码,想知道这些条件到底能做什么.public static byte[] decodeHex(final char[] data) throws DecoderException {final int len = data.length;if ((len & 0x01) != 0) { // ... -
二进制、八进制、十进制、十六进制的相互转换以及二进制的位运算
2021-03-09 20:47:09十六进制以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<&...