精华内容
下载资源
问答
  • 十六进制前缀0X 进制基数(radix) 前缀 示例 二进制 binary 0b 0B 0b11 = 2+1=3 八进制 octal 0o 0O 0 0o11 = 8+1=9 十进制 decimal 无前缀 11 = 11 十六进制 hex 0x 0X 0x...

    二进制前缀 0b
    八进制前缀 0
    十六进制前缀 0X

    进制基数(radix)前缀示例
    二进制 binary0b 0B0b11 = 2+1=3
    八进制 octal0o 0O 00o11 = 8+1=9
    十进制 decimal无前缀11 = 11
    十六进制 hex0x 0X0x11

    十进制,直接写数值即可。
    而八进制较为特殊,在不同语言中的表示有细微的差异。

    • 不同语言中的数值常量表示差异 
      • JavaScript/Python:八进制数值的前缀可以为0 0o 0O三种皆可。
      • Java/C:八进制数值只能用一种前缀0,不能用0o 0O,否则会报错(报错内容见文末)

    至于JavaC八进制数值常量只能以0开头,可能是因为这两种都是编译型的语言,而JavaScriptPython都是解释型的语言。

    不同语言中的测试

    • JavaScript
    0b11
    3
    011
    9
    0o11
    9
    11
    11
    0x11
    17
    

    在这里插入图片描述

    • Python
    0b11
    3
    011
    9
    0o11
    9
    11
    11
    0x11
    17
    

    在这里插入图片描述

    • Java
    wuyujin@ubuntu18:~$ more RadixPrefixTest.java 
    public class RadixPrefixTest {
      public static void main(String[] args) {
        System.out.println(0b11);
        System.out.println(011);  // 八进制,特殊点,前缀为0。
        System.out.println(11);
        System.out.println(0x11);
      }
    }
    wuyujin@ubuntu18:~$ javac RadixPrefixTest.java && java RadixPrefixTest 
    3
    9
    11
    17
    wuyujin@ubuntu18:~$ 
    

    在这里插入图片描述

    • C
      在这里插入图片描述
    wuyujin@ubuntu18:~$ more RadixPrefixTest.c
    # include <stdio.h>
    
    int main() {
      printf("%d\n", 0b11);
      printf("%d\n", 011);
      printf("%d\n", 11);
      printf("%d\n", 0x11);
      return 0;
    }
    wuyujin@ubuntu18:~$ gcc RadixPrefixTest.c && ./RadixPrefixTest 
    3
    9
    11
    17
    wuyujin@ubuntu18:~$ 
    

    八进制的特殊

    在Java、C中八进制数值常量只能使用前缀0,不能使用0o0O,否则会报错(语法提示也会红色高亮报警)。

    • Cerror: invalid suffix "o11" on integer constant
      在这里插入图片描述
    • Javaerror: illegal start of expression
      在这里插入图片描述

    最后需要说明:

    Kotlin不支持八进制(而java以0开头表示八进制 07)

     

    展开全文
  • 目录1、浮点类型转换为十六进制方法1:用地址用指针方法2:用共用体方法3:使用memcpy2、十六进制转换为浮点类型近日在研究Modbus协议的时候遇到这样一个情况:使用ModScan32软件,可将HEX和浮点类型转换,如下所示...

    目录

    1、浮点类型转换为十六进制

    方法1:用地址用指针

    方法2:用共用体

    方法3: 使用memcpy

    2、十六进制转换为浮点类型

    近日在研究Modbus协议的时候遇到这样一个情况:使用ModScan32软件,可将HEX和浮点类型转换,如下所示:

    edbd6d0e0584a7d123a2738d50573923.png

    那么如何在程序设计中实现十六进制和浮点类型转换呢?

    C语言和C#语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit,double数据占用64bit,我们在声明一个变量float f= 2.25f的时候,是如何分配内存的呢?如果胡乱分配,那世界岂不是乱套了么,其实不论是float还是double在存储方式上都是遵从IEEE的规范的,float遵从的是IEEE R32.24 ,而double 遵从的是R64.53。

    无论是单精度还是双精度在存储中都分为三个部分:

    1、符号位(Sign) :0代表正,1代表为负;

    2、指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储;

    3、尾数部分(Mantissa):尾数部分。

    其中float的存储方式如下图所示:

    282992e1c5ca6782bf5716a1b9504d80.png

    而双精度的存储方式为:

    27c92272c5e2a468071deacdc7ca92b6.png

    了解了基本概念后咱就开始代码实现吧~

    1、浮点类型转换为十六进制

    方法1:用地址用指针

    #include "stdio.h"

    int main(void)

    {

    float fa = 123.56;

    char farray[4] = {0};

    *(float*)farray = fa;

    printf("%f\n",*(float*)farray);

    return (0);

    }

    输出结果:

    123.559998

    方法2:用共用体

    #include "stdio.h"

    union {

    float fa;

    char farray[4];

    }utemp;

    int main(void)

    {

    int i = 0;

    float ft = 0.0;

    utemp.fa = (float)123.56;

    ft = *(float*)utemp.farray;

    printf("%f\n",ft);

    return (0);

    }

    输出结果:

    123.559998

    方法3: 使用memcpy

    #include "stdio.h"

    #include "string.h"

    int main(void)

    {

    float fa;

    char farray[4];

    float ft;

    fa = 45.23;

    memcpy(farray,&fa,sizeof(farray));

    memcpy(&ft,&farray,sizeof(farray));

    printf("%f\n",ft);

    return (0);

    }

    输出结果:

    45.230000

    2、十六进制转换为浮点类型

    #include "stdio.h"

    int main(void)

    {

    unsigned char pMem[] = {0x66,0xE6,0xF0,0x42};

    float *p = (float*)pMem;

    printf("%g\r\n",*p);

    return 0;

    }

    输出结果:

    120.45

    最后为各位分享一个十分便利的十六进制和浮点类型互相转换的小工具:

    ea9f88e8ffd5dadd49e16561db54ac8b.png

    参考链接,拓展学习:

    1、浮点数类型在计算机里面的表示方法

    2、浮点数在计算机中存储方式

    3、如何把一个float存到一个长度为4的char数组中?

    展开全文
  • C++中int型数据的十六进制写法

    万次阅读 2016-04-10 11:35:50
    在一些情况下(例如进行位操作时)我们需要使用十六进制的方式来表示int类型。 C++中十六进制的表示方法为使用”0x“前缀后面跟十六进制数据,对于32位整数来说最多需要8个十六进制数位来表示。 书写的方式与十进制...

    在C++中int类型一般表示一个有符号的32位整数。在一些情况下(例如进行位操作时)我们需要使用十六进制的方式来表示int类型。

    C++中十六进制的表示方法为使用”0x“前缀后面跟十六进制数据,对于32位整数来说最多需要8个十六进制数位来表示。

    书写的方式与十进制类似,从高位到低位,未书写的高位默认为0。

    即:

    0x01 与 0x00000001相同,都表示十进制的 1。

    int型最高位是0的为正数,最高位是1的为负数。其它位数值越大表示的数也越大。

    即在int类型中:

    正整数的最大值为 0x7fffffff  也就是十进制的 2147483647
    正整数的最小值为 0x00000001 也就是十进制的 1
    0表示为:0x00000000 
    负整数的最大值为 0xffffffff 也就是十进制的 -1
    负整数的最小值为 0x80000000 也就是十进制的 -2147483684 


    另外可以使用limits.h头文件中定义的宏来获得int型的边界

    INT_MIN 标识int型的最小值

    INT_MAX 标识int型的最大值

    展开全文
  • 看公司项目代码发现,公司有这样一段常量代码: public final static int LOAD_DATA_READY_FLAG_SPEC = 0x01; public final static int LOAD_DATA_READY_FLAG_MIT = 0x02; public final static int...

    看公司项目代码发现,公司有这样一段常量代码:




    public final static int LOAD_DATA_READY_FLAG_SPEC = 0x01;
    	public final static int LOAD_DATA_READY_FLAG_MIT = 0x02;
    	public final static int LOAD_DATA_READY_FLAG_PL = 0x04;
    	public final static int LOAD_DATA_READY_FLAG_DL = 0x08;
    	public final static int LOAD_DATA_READY_FLAG_LSP = 0x10;
    	public final static int LOAD_DATA_READY_FLAG_PW = 0x20;
    	public final static int LOAD_DATA_READY_FLAG_CE = 0x40;
    	public final static int LOAD_DATA_READY_FLAG_NAMEPARSING = 0x80;
    	public final static int LOAD_DATA_READY_FLAG_CLIENT_END = 0x100;


    疑惑:常量是十六进制的,我也偶尔会在其他地方的源码中看到使用十六进制定义常量,

    我很想知道这样定义有什么好处? 一般什么情况下定义常量优先考虑使用 十六进制?

    百度发现一个类似的跟帖,贴出来。


    http://www.oschina.net/question/59889_10149


    理解:


    共有5个答案 我要回答»

    非会员用户



    展开全文
  • 满意答案dfyosdn2015.09.13采纳率:51%等级:10已帮助:422人表示十六进制数用的是0xff第一个是数字0,不是字母oC语言本身支持的三种数字的表示是:1. 十进制。比如20、457;2. 十六进制,以0x开头。比如0x7a、0X7A...
  • c语言编程文字游戏 C中的十六进制文字 (Hexadecimal literals in C) Hexadecimal numbers are the technique to represent the numbers which uses the base-16 number; it uses 16 alphanumeric digits 0, 1, 2, 3,...
  • 十六进制、八进制、十进制、二进制,只是表示方法而已,在计算机里面用的都是二进制的,而十六进制恰好是2的4倍,表示一个字节的时候仅仅需要2个十六进制数就可以表示出来,因此多数用2个十六进制来表示一个字符,看...
  • #-*-coding:utf-8-*- ...一、二进制、八进制、十六进制表示整数常量 1.二进制加前缀"0b" 2.八进制加前缀"0o" 3.十六进制加前缀"0x" """ i1 = 0b0001 i2 = 0b010010001b1 = 0o001 b2 = 0o067c1 = 0x01bf c2 = 0x0
  •  从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。  注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。 #3 样例输入 FFFF 样例输出 65535 参考代码及详细说明 /...
  • C语言八进制和十六进制数 一 赋值 int dex = 100;// 默认十进制 int oct = 0144;// 八进制,以0開始 int hex = 0x64;// 十六进制,以0x開始 二 输出 void show(int x) { printf("dec = %d; ...
  • 数据的十六进制显示

    千次阅读 2007-06-01 18:08:00
    怎样在屏幕上以十六进制样式显示内存中的一段... 1、字节转换成十六进制字符定义十六进制字符的常量字符串,然后用字节的高四位和低四位分别作下标来直接访问常量表即得到十六进制的字符。(该功能用C语言库中的 lt
  • 比如:将十进制数209转换为十六进制 //调用toHexString方法,将十进制转为十六进制 Integer.toHexString(209);再看一下该方法实现://在Integer类中封装了进制转换的通用方法toUnsignedString public static String ...
  • 十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制中是1E。  给出一个非负整数,将它表示成十六进制的形式。 输入格式  输入包含一个...
  • 问题描述 给定n个十六进制正整数,输出它们对应的八进制数。 输入格式 输入的第一行为一个正整数n (1&lt;=n&lt;=10)。 接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,...
  • C语言中十六进制转十进制两种实现方法C语言 · 十六进制转十进制问题描述从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、...
  • C语言中的二进制、八进制和十六进制的表示

    千次阅读 多人点赞 2020-02-18 17:21:04
    二进制数、八进制数和十六进制数的表示 一个数字默认就是十进制的,表示一个十进制数字不需要任何特殊的格式。但是,表示一个二进制、八进制或者十六进制数字就不一样了,为了和十进制数字区分开来,必须采用某种...
  • 蓝桥杯java基础练习:十进制转十六进制...十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制中是1E。  给出一个非负整数,将它表示成...
  • 在密码程序中经常需要二进制大整数装换为十六进制,如内存中8位二进制整数 00111111 (63)转化为十六进制的字符串形式“3F”. 这个转换与char a = 63; printf("%02X", a)不同, 其结果为ASCII 值为63的“?”,而...
  • 接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。 输出格式 输出n行,每行为输入对应的八进制正整数。 【注意】 输入的十六进制数...
  • 怎样在屏幕上以十六进制样式显示内存中的一段数据。 下面分以下几步来介绍:...定义十六进制字符的常量字符串,然后用字节的高四位和低四位分别作下标来直接访问常量表即得到十六进制的字符。(该功能用C语言库中的 lt
  • 二进制: int a=0b101; 八进制: int a = 014; 十六进制int a = 0x8; float a =8.99; printf(”%2.1f“,a); 表示打印两位位宽,保留小时位 一位
  • 下面的程序是对两个十六进制(hex)字面常量进行相加,然后打印出十六进制的结果。这个程序会打印出什么呢? public class JoyOfHex{ public static void main(String[] args){ System.out.println( ...
  • C++ 默认情况: cin or cout在默认情况下按照十进制输入输出. 八进制: 要使输入为八进制数,首先...要使输入为十六进制数,首先切换至十六进制输入 cin >> hex; //接下来输入十六进制数 cin >> a; //...
  • 怎样在屏幕上以十六进制样式显示内存中的一段数据... 1、字节转换成十六进制字符定义十六进制字符的常量字符串,然后用字节的高四位和低四位分别作下标来直接访问常量表即得到十六进制的字符。(该功能用C语言库中的 
  • //16进制数输入%p是输入一个十六进制的数scanf("%llx",&a);也可以输入十六进制并且比较正规printf("%d",a);//十进制输出%d是输出一个十进制的数printf("0x%x",a);//16进制输出printf("%llX\n",a);也可输出一个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 42,256
精华内容 16,902
关键字:

十六进制int型常量