精华内容
下载资源
问答
  • B表示二进制数,Q表示八进制数,D表示十进制数,不同进制数都可以用对应的英文首字母来表示。十六进制在数学中是一种逢16进1的进位制。一般用数字0到9和字母A到F(或a~f)表示,其中:A~F表示10~15,这些称作十六进制...

    cebf8c18de52c008fdc7ac4785f87603.png 

    H表示的是16进制。B表示二进制数,Q表示八进制数,D表示十进制数,不同进制数都可以用对应的英文首字母来表示。

    十六进制在数学中是一种逢16进1的进位制。一般用数字0到9和字母A到F(或a~f)表示,其中:A~F表示10~15,这些称作十六进制数字。16进制通常可以用hex或者下标16来表示。

    十六进制可以和其它进制进行转换,例如十六进制数39,换算成十进制就是57,换算成二进制可以写作111001。

    在历史上,中国曾经在重量单位上使用过16进制,比如,规定16两为一斤。由于将4个位元化成单独的十六进制数字不太困难,所以十六进制普遍应用在计算机领域中。

    十六进制作为计算机领域一种重要的数制,对计算机理论的描述,计算机硬件电路的设计都是很有益的。比如逻辑电路设计中,既要考虑功能的完备,还要考虑用尽可能少的硬件,十六进制就能起到一些理论分析的作用。

    比如四位二进制电路,最多就是十六种状态,也就是一种十六进制形式,只有这十六种状态都被用上了或者尽可能多的被用上,硬件资源才发挥了尽可能大的作用。

    展开全文
  • 计算机中的进制 & 位运算为什么计算机用二进制计数:计算机是由电路构成的, 电路只有 0 和 1 两种状态.不同进制间的换算:在十进制中, 个位的 1 代表 10=1, 十位的 1 代表 10¹=10, 百位的 1 代表 10²=100, 所以:...

    计算机中的进制 & 位运算

    为什么计算机用二进制计数:

    计算机是由电路构成的, 电路只有 0 和 1 两种状态.

    不同进制间的换算:

    在十进制中, 个位的 1 代表 10=1, 十位的 1 代表 10¹=10, 百位的 1 代表 10²=100, 所以: 123=1*10²+2*10¹+3*10

    同样道理, 在二进制中, 个位的 1 代表 2=1, 十位的 1 代表 2¹=2, 百位的 1 代表 2²=4, 所以:(A3A2A1A0)=A3*2³+A2*2²+A1*2¹+A0*2

    如果二进制和十进制数出现在同一个等式中, 为了区别我们用(A3A2A1A0)这种形式表示 A3A2A1A0 是二进制数, 每个数字只能是 0 或 1, 其它没有套括号加下标的数仍表示十进制数. 对于(A3A2A1A0)这样一个二进制数, 最左边的 A3 位称为最高位(MSB,Most Significant Bit), 最右边的 A0 位称为最低位(LSB,Least Significant Bit). 以后我们遵循这样的惯例: LSB 称为第 0 位而不是第 1 位, 所以如果一个数是 32 位的, 则 MSB 是第 31 位. 上式就是从二进制到十进制的换算公式.

    下面来看十进制怎么换算成二进制. 我们知道

    13=1*2³+1*2²+0*2¹+1*2 所以 13 换算成二进制应该是(1101). 问题是怎么把 13 分解成等号右边的形式呢? 注意到等号右边可以写成

    13=(((0*2+1)*2+1)*2+0)*2+1

    我们将 13 反复除以 2 取余数就可以提取出上式中的 1101 四个数字, 为了让读者更容易看清楚是哪个 1 和哪个 0, 上式和下式中对应的数字都加了下标:

    13÷2=6...1 6÷2=3...0 3÷2=1...1 1÷2=0...1

    把这四步得到的余数按相反的顺序排列就是 13 的二进制表示, 因此这种方法称为除二反序取余法.

    计算机用二进制表示数, 程序员也必须习惯使用二进制, 但二进制写起来太啰嗦了, 所以通常将二进制数分成每三位一组或者每四位一组, 每组用一个数字表示. 比如把(10110010)从最低位开始每三位分成一组, 10,110,010, 然后把每组写成一个十进制数字, 就是(262), 这样每一位数字的取值范围是 0~7, 逢八进一, 称为八进制(Octal). 类似地, 把(10110010)分成每四位一组, 1011,0010, 然后把每组写成一个数字, 这个数的低位是 2, 高位已经大于 9 了, 我们规定用字母 A~F 表示 10~15, 这个数可以写成(B2), 每一位数字的取值范围是 0~F, 逢十六进一, 称为十六进制(Hexadecimal). 所以, 八进制和十六进制是程序员为了书写二进制方便而发明的简便写法, 好比草书和正楷的关系一样.

    位运算:

    整数在计算机中用二进制的位来表示, C 语言提供一些运算符可以直接操作整数中的位, 称为位运算.

    1.1. 按位与, 或, 异或, 取反运算

    按位与(&): 两个操作数都是 1, 结果是 1, 否则是 0

    或(|): 两个操作数有一个 1, 结果是 1

    异或(^): 两个操作数相同则结果为 0, 两个操作数不同则结果为 1

    取反运算(~): 对操作数取反

    ab7653affab982b574eb7acc55df2e04.gif

    1.2. 移位运算

    移位运算符 (Bitwise Shift) 包括左移<>. 左移将一个整数的各二进制位全部左移若干位, 例如 0xcfffffff3<<2 得到 0x3fffffcc:

    ab7653affab982b574eb7acc55df2e04.gif

    Java 平台都是有符号整数, 所以上述图一操作在 Java 中符号位发生了变化值由 (-805306381) 变为(1073741772)

    在一定的取值范围内, 将一个整数左移 1 位相当于乘以 2. 比如二进制 11(十进制 3)左移一位变成 110, 就是 6, 再左移一位变成 1100, 就是 12. 读者可以自己验证这条规律对有符号数和无符号数都成立, 对负数也成立. 当然, 如果左移改变了最高位(符号位), 那么结果肯定不是乘以 2 了, 所以我加了个前提 "在一定的取值范围内". 由于计算机做移位比做乘法快得多, 编译器可以利用这一点做优化, 比如看到源代码中有 i * 8, 可以编译成移位指令而不是乘法指令.

    当操作数是无符号数时, 右移运算的规则和左移类似, 例如 0xcffffff3>>2 得到 0x33fffffc:

    ab7653affab982b574eb7acc55df2e04.gif

    Java 平台执行结果: 值由 - 805306381 变成 -201326596 仍然保留负数的符号位, 相当于除以 4

    最低两位的 11 被移出去了, 最高两位又补了两个 0, 其它位依次右移两位. 和左移类似, 移动的位数也必须小于左操作数的总位数, 否则结果是 Undefined. 在一定的取值范围内, 将一个整数右移 1 位相当于除以 2, 小数部分截掉.

    当操作数是有符号数时, 右移运算的规则比较复杂:

    如果是正数, 那么高位移入 0

    如果是负数, 那么高位移入 1 还是 0 不一定, 这是 Implementation-defined 的. 对于 x86 平台的 gcc 编译器, 最高位移入 1, 也就是仍保持负数的符号位, 这种处理方式对负数仍然保持了 "右移 1 位相当于除以 2" 的性质.

    综上所述, 由于类型转换和移位等问题, 用有符号数做位运算是很不方便的, 所以, 建议只对无符号数做位运算, 以减少出错的可能.

    1.3. 掩码:

    如果要对一个整数中的某些位进行操作, 怎样表示这些位在整数中的位置呢? 可以用掩码 (Mask) 来表示. 比如掩码 0x0000ff00 表示对一个 32 位整数的 8~15 位进行操作, 举例如下.

    1, 取出 8~15 位.unsignedinta,b,mask=0x0000ff00;

    a=0x12345678;

    b=(a&mask)>>8;/* 0x00000056 */

    2, 将 8~15 位清 0.unsignedinta,b,mask=0x0000ff00;

    a=0x12345678;

    b=a&~mask;/* 0x12340078 */

    3, 将 8~15 位置 1.unsignedinta,b,mask=0x0000ff00;

    a=0x12345678;

    b=a|mask;/* 0x1234ff78 */

    位运算在雪花算法的应用:

    12bits 毫秒增量的最大值: 1 右移 12 位减去 1, 可以自己用等比数列计算下 12bit 的最大值, 看是否和位移的结果一致; 二进制表示:(...001111 1111 1111)(14 位以后的 0 用省略号代替)

    10bits 工作进程 Id :1 右移 10 位, 这里我有个疑问, 不应该再减去 1, 才是最大值么

    判断是否需要获取下一个时间的依据: 0L == (sequence = ++sequence & SEQUENCE_MASK) sequence 和最大值两个数 按位与, 只有当 sequence 大于 SEQUENCE_MASK 的时候,& 的结果是 0, 获取下一个时间戳

    41bits:(currentMillis - EPOCH) <

    ((currentMillis - EPOCH) << TIMESTAMP_LEFT_SHIFT_BITS) | (workerId << WORKER_ID_LEFT_SHIFT_BITS) | sequence; 41bits|10bits|12bits, 因为右移低位补 0, 按位或操作, 其实就是操作数本身.

    shrding-jdbc 默认的实现:/**

    * 默认的主键生成器.

    *

    *

    * 长度为 64bit, 从高位到低位依次为

    *

    *

    *

    
     

    * 1bit 符号位

    * 41bits 时间偏移量从 2016 年 11 月 1 日零点到现在的毫秒数

    * 10bits 工作进程 Id

    * 12bits 同一个毫秒内的自增量

    *

    *

    *

    * 工作进程 Id 获取优先级: 系统变量{@code sharding-jdbc.default.key.generator.worker.id} 大于 环境变量{@code SHARDING_JDBC_DEFAULT_KEY_GENERATOR_WORKER_ID}

    * , 另外可以调用 @{@code DefaultKeyGenerator.setWorkerId}进行设置

    *

    *

    * @author gaohongtao

    */

    @Getter

    @Slf4j

    publicfinalclassDefaultKeyGeneratorimplementsKeyGenerator{

    publicstaticfinallongEPOCH;

    publicstaticfinalStringWORKER_ID_PROPERTY_KEY="sharding-jdbc.default.key.generator.worker.id";

    publicstaticfinalStringWORKER_ID_ENV_KEY="SHARDING_JDBC_DEFAULT_KEY_GENERATOR_WORKER_ID";

    privatestaticfinallongSEQUENCE_BITS=12L;

    privatestaticfinallongWORKER_ID_BITS=10L;

    privatestaticfinallongSEQUENCE_MASK=(1<

    privatestaticfinallongWORKER_ID_LEFT_SHIFT_BITS=SEQUENCE_BITS;

    privatestaticfinallongTIMESTAMP_LEFT_SHIFT_BITS=WORKER_ID_LEFT_SHIFT_BITS+WORKER_ID_BITS;

    privatestaticfinallongWORKER_ID_MAX_VALUE=1L<

    @Setter

    privatestaticTimeServicetimeService=newTimeService();

    @Getter

    privatestaticlongworkerId;

    static{

    Calendarcalendar=Calendar.getInstance();

    calendar.set(2016,Calendar.NOVEMBER,1);

    calendar.set(Calendar.HOUR_OF_DAY,0);

    calendar.set(Calendar.MINUTE,0);

    calendar.set(Calendar.SECOND,0);

    calendar.set(Calendar.MILLISECOND,0);

    EPOCH=calendar.getTimeInMillis();

    initWorkerId();

    }

    privatelongsequence;

    privatelonglastTime;

    publicstaticvoidinitWorkerId(){

    StringworkerId=System.getProperty(WORKER_ID_PROPERTY_KEY);

    if(!Strings.isNullOrEmpty(workerId)){

    setWorkerId(Long.valueOf(workerId));

    return;

    }

    workerId=System.getenv(WORKER_ID_ENV_KEY);

    if(Strings.isNullOrEmpty(workerId)){

    return;

    }

    setWorkerId(Long.valueOf(workerId));

    }

    /**

    * 设置工作进程 Id.

    *

    * @param workerId 工作进程 Id

    */

    publicstaticvoidsetWorkerId(finallongworkerId){

    Preconditions.checkArgument(workerId>=0L&&workerId

    DefaultKeyGenerator.workerId=workerId;

    }

    /**

    * 生成 Id.

    *

    * @return 返回 @{@link Long}类型的 Id

    */

    @Override

    publicsynchronizedNumbergenerateKey(){

    longcurrentMillis=timeService.getCurrentMillis();

    Preconditions.checkState(lastTime<=currentMillis,"Clock is moving backwards, last time is %d milliseconds, current time is %d milliseconds",lastTime,currentMillis);

    if(lastTime==currentMillis){

    if(0L==(sequence=++sequence&SEQUENCE_MASK)){

    currentMillis=waitUntilNextTime(currentMillis);

    }

    }else{

    sequence=0;

    }

    lastTime=currentMillis;

    if(log.isDebugEnabled()){

    log.debug("{}-{}-{}",newSimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(newDate(lastTime)),workerId,sequence);

    }

    return((currentMillis-EPOCH)<

    }

    privatelongwaitUntilNextTime(finallonglastTime){

    longtime=timeService.getCurrentMillis();

    while(time<=lastTime){

    time=timeService.getCurrentMillis();

    }

    returntime;

    }

    }

    最后:

    小尾巴走一波, 欢迎关注我的公众号, 不定期分享编程, 投资, 生活方面的感悟:)

    ab7653affab982b574eb7acc55df2e04.gif

    来源: https://juejin.im/post/5c0296aae51d454556295dc5

    展开全文
  • 进制(标识B)十进制.ppt计算机中数据的表示 十进制 - Decimal 由十个符号组成 逢十进一 运算规则多 容易理解 八进制 – Octal 由八个符号组成 逢八进一 二进制 - Binary 由二个符号组成 逢二进一 运算规则简单 物理...

    二进制(标识B)十进制.ppt

    计算机中数据的表示 十进制 - Decimal 由十个符号组成 逢十进一 运算规则多 容易理解 八进制 – Octal 由八个符号组成 逢八进一 二进制 - Binary 由二个符号组成 逢二进一 运算规则简单 物理电路上实现容易 十六进制 – Hex 由十六个符号组成:0-9 A-F 逢十六进一 简化书写,和二进制转化方便 不同数制的常见书写方法 下标法: (120)10 (98)16 (1101)2 后缀: 120D 98H 1101B 问:在计算机中也是用十进制编码的吗?为什么? 在计算机中用二进制编码。 计算机作为一种电子计算工具,是由大量的电子器件组成的,在这些电子器件中,电路的通和断、电位的高和低,用两个数字符号“1”和“0”分别表示容易实现。同时二进制的运算法则也很简单,因此,在计算机内部通常用二进制代码来作为内部存储、传输和处理数据。 1、二进制代码的特征 (1)只有两个基本数码:0,1 (2)采用逢2进1的进位规则。 十进制采用逢10进1 如:17+6=23 二进制采用逢2进1 如:(1011)2+(101)2= (10000)2 (3)每个数码在不同的数位上,对应不同的权值 十进制 157=1*102+5*101+7*100 二进制 10010=1*24+0*23+0*22+1*21+0*20 十进制转二进制 除二取余法 * * * * * * Copyright ? zhz@HEBUT 第二节 信息的编码2 17世纪,德国数学家莱布尼兹提出了二进制记数系统。 19世纪爱尔兰逻辑学家乔治·布尔创立了逻辑代数。 冯·诺依曼提出了计算机采用二进制的构想。 显示器显示人们 易于接受的十进 制数以及图画等 机器内部能识别和 处理的二进制数 二进制加减法 11010 1011 + 100101 11010 1011 - 1111 二进制编码的特征 (1)只有两个基本数码:0,1 (2)采用逢二进一的进位规则 (3)每个数码在不同的数位上,对应不同的权值 例:二进制数(1101.01)2各数位的权值 1 1 0 1 . 0 1 20 21 22 23 2-1 2-2 F 1111 15 E 1110 14 D 1101 13 C 1100 12 B 1011 11 A 1010 10 9 1001 9 8 1000 8 7 0111 7 6 0110 6 5 0101 5 4 0100 4 3 0011 3 2 0010 2 1 0001 1 0 0000 0 十六进制 (标识H) 二进制 (标识B) 十进制 (标识D) 表1.2.2 进位制转换 二进制数不便于书写和记忆,人们经常采用十六进制来表示他们。转换方法位每4位二进制数可以用1位十六进制数代替。 2 =D2H 7FH 28 2 14 0 2 7 0 2 3 1 1 2 1 1 28D=11100B 余 数 倒 着 写 出 (28)10=(11100)2

    展开全文
  • 基数与权值 二进制进制进制 十六进制 常用数制转化–非十进制转换成十进制 ...下标D表示十进制下标H表示十六进制下标O表示八进制B表示二进制。 常用数制转化–十进制转化为其他进制 ...

    基数与权值

    在这里插入图片描述

    二进制

    在这里插入图片描述

    八进制

    在这里插入图片描述

    十进制

    在这里插入图片描述

    十六进制

    在这里插入图片描述

    常用数制转化–非十进制转换成十进制

    在这里插入图片描述
    在这里插入图片描述下标D表示十进制,下标H表示十六进制,下标O表示八进制,B表示二进制。
    在这里插入图片描述

    常用数制转化–十进制转化为其他进制

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    十进制小数转换–数乘基数取整法

    在这里插入图片描述
    关键点是:小数一直乘R进制数,取整数
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    整数小数分开求,10进制整数部分用:除基数取余法,
    纯小数部分用:乘基数取整法

    二进制转化为八进制或十六进制在这里插入图片描述

    在这里插入图片描述

    八进制或十六进制转化为二进制

    在这里插入图片描述
    在这里插入图片描述

    转化规律总结

    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • B. Asia区域制 单测试点时限:1.0 秒 内存限制:512 MB 二进制数据是用0和1两个数码来表示的数....十六进制(简写为hex或下标16)在数学中是一种逢16进1的进位制.一般用数字0到9和字母A到F(或a~f)表示,其中:a~...
  • 进制也就是进位计数制,是人为定义的带进位的计数方法(有不带进位的计数方法,比如原始的结绳计数法,唱票时常用的“正”字计数法,以及类似的tally mark计数)。 对于任何一种进制---X进制,就表示每一位置上的数...
  • (java)输入一个十六进制数a,和一个八进制b,输出a+b的十进制结果(范围-231~231-1)。
  • 要将十进制整数n转换为b进制,将n作为被除数b为除数取余记为rema,商记为consult,每一次的取余所得值赋值给另一数组result,从下标为0到count,count为记录递归的次数同时为存放转换后所得值的位数,最后顺序输出...
  • 输入两个非负10进制整数A和B(30-1),输出A+B的D (1 输入格式: 输入在一行中依次给出3个整数A、B和D。 输出格式: 输出A+B的D进制数。 输入样例: 123 456 8 输出样例: 1103 提交代码: 1 2 3 ...
  • pat-B1022-D进制的A+B

    2020-02-13 15:37:58
    10进制转换低进制用除数取余法,因为a+b不超过31位,所以用数组存储转换后的结果,再从高位输出到低位。 注意a+b=0时特判输出0。 代码 #include <stdio.h> #include <math.h> #include <string.h>...
  • 进制进制转换

    2021-08-16 11:09:26
    一、进制基础 1、十进制 ①系数:0-9 ②进位规则:逢10进1 ③权:基数的次幂 基数:几进制的基数就是进制的基数:10 十进制的权:10的次幂 二、进制转换
  • 《计算机中进制进制转换》由会员分享,可在线阅读,更多相关《计算机中进制进制转换(55页珍藏版)》请在人人文库网上搜索。1、计算机中进制进制...进制就是逢进一 我们说的n进制其实就是指逢n进一 我们计算机...
  • 什么是进制

    2019-11-23 16:34:24
    进制 由于人类解剖学的特点,双手共有十根手指,故在人类自发采用的进位制中,十进制是使用最为普遍的一种。成语“屈指可数”某种意义上来说描述了一个简单计数的场景,而原始人类在需要计数的时候,首先想到的就是...
  • 输入两个非负 10 进制整数 A 和 B (≤2302^{30}230−1),输出 A+B 的 D (1<D≤10)进制数。 输入 输入在一行中依次给出 3 个整数 A、B 和 D。 输出 输出 A+B 的 D 进制数。 样例输入 123 456 8 样例输出 1103 知识...
  • 今天听说全国的疫情有严重了,还是希望快快好起来。回归正常生活。我和我的小伙伴们都能赚很多小钱钱,...二进制数制系统(下标是2或者B)(Binary) 八进制数制系统(下标8或O)(Octal) 十六进制数制系统(下标1
  • HDU2033 人见人爱A+B进制

    千次阅读 2016-06-23 21:49:44
    人见人爱A+B Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 49289 Accepted Submission(s): 32536 Problem Description HDOJ上面已经有10来道...
  • 10进制vs2进制

    2020-02-06 16:35:45
    对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制B,我们乘B为A的二进制逆序数。 例如对于十进制数173,它的二进制形式为10101101,逆序排列得到10110101,其十进制数为181,181即为173的...
  • 进制和十六进制

    千次阅读 2018-08-16 08:40:17
    课程导言 【最早的编程语言是二进制语言,也是计算机能够直接...通过本篇的学习,你将了解到为什么计算机能够直接识别二进制语言,二进制的计数原理以及与十进制、十六进制之间的数值转换。】   在讲述二进制之...
  • 文章目录常见进制进制(Decimal)二进制(Binary)八进制(Octal)十六进制(Hexadecilmal)不同进制的相互转换二进制运算二进制种表示形式 常见进制进制(Decimal) 十进制标志为D,如(1250)D 下标表示,...
  • 1022. D进制的A+B

    2017-03-01 20:07:04
    1022. D进制的A+B 输入两个非负10进制整数A和B(30-1),输出A+B的D (1 输入格式: 输入在一行中依次给出3个整数A、B和D。 输出格式: 输出A+B的D进制数。 输入样例: 123 456 8 输出样例: 1103 ...
  • 算法笔记---D进制的A+B

    2020-03-26 12:08:57
    输入两个非负十进制整数A和B (<=2^30 - 1)以及D(进制数),输出A+B的D(1<=D<=10)进制数 输入格式: 在一行中依次给出三个整数A、B和D(进制数) 输出格式: A+B的D进制数 样例: 输入:123 456 8 输出:...
  • 关于进制

    2018-10-19 19:25:02
    一、进制 进制也就是进位计数制,是人为定义的带进位的计数方法(有不带进位的计数方法,比如原始的结绳计数法,唱票时常用的“正”字计数法,以及类似的tally mark计数)。 对于任何一种进制——X进制,就表示每一...
  • PAT1022 D进制的A+B(C)

    2019-10-24 17:17:54
    进制转换 输入两个非负 10 进制整数 A 和 B (≤230​​ −1),输出 A+B 的 D (1<D≤10)进制数。...这道题比较简单,输出a+b进制转换之后的结果,可以先计算a+b,此时为10进制,然后10进制转换为其他进制...
  • #include ...*函数功能:将十进制整数n转换成b进制后,再转化成字符串到s *函数参数:n 表示十进制整数,可正可负 * s 表示存取的字符串 * b 表示进制数 */ void intToString_Recursion(__int64 n, cha
  • 进制转换

    2021-01-24 00:07:58
    进制转换十进制转换为二进制进制转换为十进制进制转换为十六进制进制转换为二进制进制转换为十进制进制转换为十六进制
  • 众所周知,计算机中使用的是二进制运算规则,能够读懂二进制语言,但究竟什么是进制进制之间是如何相互转化的?今天我们就来详细了解下。
  • 计算机中不同进制数的表示在电子计算机的信息处理中,无论多么复杂的信息,例如,图片、音乐、视频等,在计算机内部都是仅用“0”与“1”两个简单数字表示的信息,对于在实际当中我们能理解的信息都是用这种数字进行...
  • 进制转十六进制

    千次阅读 2020-01-15 21:07:51
    它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至15。十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制中是1E...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 72,668
精华内容 29,067
关键字:

下标b是几进制