进制

对于整数有4种表现方式

  • 二进制,满二进一
  • 十进制,满10进1
  • 八进制,满8进1,数字0开头
  • 十六进制,满16进1,以0x或0X开头

进制转换

二进制转十进制

规则:从最低位开始(右边),将每位数提取出来,乘以2的(位数-1)次方,然后求和
1011 = 2^0 + 2^1 + 0 + 2^3 = 11
110001100 = 4 + 8 + 2^7 + 2^8 = 128 +256 +4 +8 =396

二进制转八进制

规则:将二进制的每三位一组(从最右边),转成对应的八进制数即可
11010101 = (11)(010)(101) = 0325
11100101 = (11)(100)(101) = 0345

二进制转十六进制

规则:将二进制的每四位一组(从最右边),转成对应的十六进制数即可
11010101 = (1101)(0101) = 0xd5
1110010110 = (11)(1001)(0110) = 0x396

八进制转十进制

规则:从最低位开始(右边),将每位数提取出来,乘以8的(位数-1)次方,然后求和
0123 = 3 * 8^0 + 2 * 8^1 + 1* 8^2 = 3+16+64 = 83
02456 = 6 + 40 + 64*4 +2*8^3 = 1024 + 256 + 46 = 1326

八进制转二进制

规则:将八进制的每一位数转化成对应3位数的二进制即可
0237 = (010)(011)(111)

十六进制转十进制

规则:从最低位开始(右边),将每位数提取出来,乘以16的(位数-1)次方,然后求和
0X34A = 10 * 16^0 + 4 * 16^1 + 3 * 16^2 = 10 + 64 + 768 = 842
0xA45 = 5 + 64 + 10 * 16^2 = 2560+ 69 = 2629

十六进制转二进制

规则:将十六进制的每一位数转化成对应4位数的二进制即可
0x237 = (0010)(0011)(0111)

十进制转二进制

规则:将该数不断除以2,直到商为0为止,将每部对应的余数倒过来就是对应二进制
56 = 111000
123 = 1111011

十进制转八进制

规则:将该数不断除以8,直到商为0为止,将每部对应的余数倒过来就是对应二进制
156 = 0234
678 = 1246

十进制转十六进制

规则:将该数不断除以16,直到商为0为止,将每部对应的余数倒过来就是对应二进制
356 = 0x164
8912 = 0X22d0

位运算

二进制的运算

在计算机内部,运行各种计算时,都是以二进制的方式运行

原码、反码、补码

  1. 对于有符号的而言,二进制的最高位是符号为,0为整数,1为负数
  2. 正数的原码、反码、补码都一样
  3. 负数的反码,符号位不变,其他位取反
  4. 负数的补码,等于反码+1
  5. 0的反码补码都是0
  6. 计算机运行的时候,都是以补码的方式运行的
1  -》 原码0000 0001 =》反码=》0000 0001=》补码0000 0001
-1 =》 源码1000 0001 =》反码=》1111 1110=》补码1111 1111

位运算符和移位运算符

3个位运算
  1. 按位与& : 2位为1,结果为1,反之为0
  2. 按位或| : 2位其中一位为1,结果为1,反之为0
  3. 按位异或^ : 两个相同为0,不同为1
2个移位运算符
  1. 左移<< 符号位不变,低位补0
  2. 右移>>符号位不变,低位溢出,并用符号为补溢出的高位
a := 1 >> 2 // 0000 0001 => 0000 0000 = 0
b := 1 << 2 // 0000 0001 => 0000 0100 = 4

思考题

1) 请看下面的代码段,回答 a,b,c,d 结果是多少?
func main() {
var a int = 1 >> 2
var b int = -1 >> 2
var c int = 1 << 2
var d int = -1 << 2 //a,b,c,d 结果是多少
fmt.Println("a=", a) //0
fmt.Println("b=", b) //-1
fmt.Println("c=", c) //4
fmt.Println("d=", d) //-4
} 1 >> 2 // 0000 0001 => 0000 0000 = 0
-1 >> 2 // 1000 0001原码 =》反码 1111 1110=》补码 1111 1111 >>2 = 1111 1111 补码=》反码1111 1110 =》 1000 0001 = -1
1 << 2 // 0000 0001 => 0000 0100 = 4
-1 << 2 // 1111 1111补码=》1111 1100 =》反码=》1111 1011 =》原码 1000 0100 = -4
2) 请回答在 Golang 中,下面的表达式运算的结果是:
func main() {
fmt.Println(2&3) //2
fmt.Println(2|3) //3
fmt.Println(13&7) //5
fmt.Println(5|4) //5
fmt.Println(-3^3) //-2
} 2&3 0000 0010
0000 0011
0000 0010 = 2 2|3 0000 0010
0000 0011
0000 0011 = 3 13&7 0000 1101
0000 0111
0000 0101 =5 5|4 0000 0101
0000 0100
0000 0101 = 5 -3^3 1111 1101
0000 0011
1111 1110补码 =》1111 1101反码 =》 1000 0010 = -2
-3 =》 1000 0011原码=》反码 1111 1100 =》补码1111 1101

day4-进制与位运算的更多相关文章

  1. 【JavaScript】进制转换&位运算,了解一下?

    前言 在一般的代码中很少会接触到进制和位运算,但这不代表我们可以不去学习它.作为一位编程人员,这些都是基础知识.如果你没有学过这方面的知识,也不要慌,接下来的知识并不会很难.本文你将会学习到: 进制转 ...

  2. Python笔记_第一篇_面向过程_第一部分_3.进制、位运算、编码

    通过对内存这一个部分的讲解,对编程会有一个相对深入的认识.数据结构是整个内存的一个重要内容,那么关于数据结构这方面的问题还需要对进制.位运算.编码这三个方面再进行阐述一下.前面说将的数据结构是从逻辑上 ...

  3. C#的格式化(进制转换|位运算)

    1.首先做一下知识的普及C或c Currency 货币格式D或d Decimal 十进制格式E或e Exponent 指数格式F或f Fixed point (float)固定精度格式G或g Gene ...

  4. javascript中的类型转换(进制转换|位运算)

    1:parseInt(string) : 这个函数的功能是从string的开头开始解析,返回一个整数 parseInt("123hua"); //输出 123 parseInt(& ...

  5. 4.Python 进制和位运算

    .button, #logout { color: #333; background-color: #fff; border-color: #ccc; } span#login_widget > ...

  6. Codeforces Round #299 (Div. 2) B. Tavas and SaDDas【DFS/*进制思维/位运算/一个数为幸运数,当且仅当它的每一位要么是4,要么是7 ,求小于等于n的幸运数个数】

    B. Tavas and SaDDas time limit per test 1 second memory limit per test 256 megabytes input standard ...

  7. ACM 16进制的简单运算

    16进制的简单运算 时间限制:1000 ms  |  内存限制:65535 KB 难度:1   描述 现在给你一个16进制的加减法的表达式,要求用8进制输出表达式的结果.   输入 第一行输入一个正整 ...

  8. NYOJ--244--16进制的简单运算(C++控制输入输出)

    16进制的简单运算 时间限制:1000 ms  |  内存限制:65535 KB 难度:1   描述 现在给你一个16进制的加减法的表达式,要求用8进制输出表达式的结果.   输入 第一行输入一个正整 ...

  9. nyoj 244-16进制的简单运算 (scanf("%x%c%x", &a, &b, &c); printf("%o", a ± b))

    244-16进制的简单运算 内存限制:64MB 时间限制:1000ms 特判: No 通过数:12 提交数:13 难度:1 题目描述: 现在给你一个16进制的加减法的表达式,要求用8进制输出表达式的结 ...

  10. ios开发学习笔记004-进制与位运算

    进制 二进制   0 1组成,封2进1 八进制 0-7组成,封8进1 十进制 0-9组成,封10进1 十六进制 0-15组成,封16进1 printf以不同进制形式进行输出 变量的内存地址形式 变量在 ...

随机推荐

  1. 履机乘变,轻舟便楫:源启分布式PaaS深度赋能企业级技术平台建设

    导语 源启分布式PaaS平台围绕应用视角为用户提供应用运行的全生命周期管控能力,提供注册中心.服务路由.网关.服务治理等中间件技术支持,实现应用之间的联通,解决客户多厂商产品不兼容.产品组合不可选择. ...

  2. 龙哥量化:期货软件中红红绿绿的"多开,空开,空平,多平,多换,空换,双开,双平,换手"是什么意思?(转载的)

    期货投资者在看盘时,会看到红红绿绿的"多开,空开,空平,多平,多换,空换,双开,双平,换手",以快期专业版为例,如下图1所示: 图1.红绿开平数据(快期专业版) 这些数据里面的红色 ...

  3. Qt开发经验小技巧201-205

    编译生成debug版本动态库,文件末尾自动加上d结尾. CONFIG(debug, debug|release) { win32: TARGET = $$join(TARGET,,,d) mac: T ...

  4. Qt音视频开发32-Onvif网络设置

    一.前言 用onvif协议来对设备的网络信息进行获取和设置,这个操作在众多的NVR产品中,用的很少,绝大部分用户都还是习惯直接通过摄像机的web页面进去配置,其实修改网络配置的功能在大部分的NVR中都 ...

  5. vue 控件的淡入淡出

    页面代码. 1.首先要用transition 包裹一下,设置name或者不设置都可以,其次transition 下面要有一个div设置v-if来触发移入移出 <transition name=& ...

  6. 思维导图学《Java性能权威指南》

    目录 性能测试 Java 性能调优工具箱 JIT 编译器 垃圾收集 原生内存 线程与同步的性能 Java API 技巧 GitHub LeetCode 项目 目录 YANO SPACE 2021 计划 ...

  7. Bogus:.NET的假数据生成利器

    我们在项目开发中,为了保证系统功能完整.准确性,我们都需要模拟真实数据进行测试. 今天推荐一个开源库,方便我们制造假数据测试. 01 项目简介 Bogus 是一个开源的 .NET 库,它提供了一个强大 ...

  8. CDS标准视图:维护通知原因数据 I_MaintNotificationCauseData

    视图名称:维护通知原因数据 I_MaintNotificationCauseData 视图类型:基础 视图代码: 点击查看代码 @AbapCatalog.sqlViewName: 'INOTIFCAU ...

  9. w3cschool-Groovy 教程

    Groovy的特点 Groovy中有以下特点: 同时支持静态和动态类型. 支持运算符重载. 本地语法列表和关联数组. 对正则表达式的本地支持. 各种标记语言,如XML和HTML原生支持. Groovy ...

  10. SqlServer数据插入性能小记

    对于SQL性能,已经很久没关注了.由于近期项目既没有几千万的海量数据也没有过多的性能要求,所以在性能上也就没下太多功夫.然而,前不久和朋友闲谈间话题一转就说到程序上了,他说他用Delphi做了个数据导 ...