符号计算

Java中的位运算

烂漫一生 提交于 2019-12-20 00:29:42
  最近饶有兴致,看了一些java源代码,发现源码里面一些精巧的实现是通过位运算实现的,比如十进制整数转成十六进制形式字符串输出: 1 public static String toHexString(int i) 2 { 3 return toUnsignedString(i, 4); 4 } 5 6 private static String toUnsignedString(int i, int shift) { 7 char[] buf = new char[32]; 8 int charPos = 32; 9 int radix = 1 << shift; 10 int mask = radix - 1; 11 do { 12 buf[--charPos] = digits[i & mask]; 13 i >>>= shift; 14 } while (i != 0); 15 16 return new String(buf, charPos, (32 - charPos)); 17 } 18 19 final static char[] digits = { 20 '0' , '1' , '2' , '3' , '4' , '5' , 21 '6' , '7' , '8' , '9' , 'a' , 'b' , 22 'c' , 'd' , 'e' , 'f' , 'g

数据结构与算法--栈、队列(栈)

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-18 02:38:31
hello,everybody. 我们又见面了,这次我们一起来学习数据结构中,非常有意思的两种结构—Stack ,Queue. 首先来学习一下栈: 栈: 限定只在表尾进行删除插入操作的线性表。 顾名思义,栈是一种特殊的线性表。它特殊在什么地方呢?它只能在表尾进行插入或删除操作,又就意味着,它只能是先进后出。给大家举个现实中,利用栈的例子。我们都用浏览器浏览过网页,我们对浏览器的前进后退按钮一定都不陌生。当我们打开第一个网页时,有一个图片链接,于是我们又跳到了第二个网页。此时,又有一个文字链接,我们又跳到了第三个网页。此时,我点击浏览器的后退按钮,我们会回到第二个网页。再点击浏览器的后退按钮,我们又跑到了第一个网页。是不是最先打开的第一个网页,是最后一个恢复的?是不是,先进后出? 看来,我们在学习第二章线性表时,付出的心血没有白费。看看,我在学习栈与队列时,感到很轻松,因为它讲的一些概念,我都掌握了。所以,我们在学习知识时,一定要踏实,耐心。付出一定会有回报的,你用心付出,回报巨大,回报明显。你不用心付出,回报微小,回报不明显。你不付出,只是随意看看,那么当别人说起这些知识时,你也可以装下B。所以,付出是有回报的。只是为了,回报巨大,回报明显,我们需要用心,态度要端正。 我们把允许删除的一端称为栈顶(Top),另一端称为栈底(Bottom). 不含任何数据元素的栈称为空栈

机器数,原码,反码,补码,移码

こ雲淡風輕ζ 提交于 2019-12-18 01:58:13
| 版权声明:本文为博主原创文章,未经博主允许不得转载。   在计算机中所有的数据的保存均是用二进制来实现的,而二进制的表示则是一串的0,1组成。而在计算机的表达中有着机 器数和原码,反码,补码和移码等数据的编码表示方法。其中这些编码的方法称为码制。 (1)、机器数 各种数据在计算机中的表示的形式称为机器数,其特点是数的符号用0、1来表示。机器数并不能算作真正的数值。 (2)、真值   机器数对于的实际数值称为该数的真值。也就是带符号的机器数(机器数是不带符号位的);机器数又分为无符号 数和有符号数两种。无符号数表示正数,在机器数中没有符号位。对于带符号数,机器数的最高位是表示正负两种符号 的,其中1表式负数,0表示正数。 1 真值和机器数的区别:(以3为例,总位数为8) 2 机器数: 00000011 表示机器数3,但是不知道是+3还是-3 3 真值: 00000011 表示+3 4 10000011 表示-3 (3)、原码   原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制,如下: 1 1的原码: 2 4 [+1]原 = 00000001 5 7 [-1]原 = 10000001 (4)、反码   反码有两种情况:     》、当原码为正数时,其反码就等于正数的原码(+原码 = +反码) 》、当原码为负数时

LINUX下动态链接库的使用(dlopen/dlsym/dlclose/dlerror)

走远了吗. 提交于 2019-12-18 00:31:53
dlopen 功能:打开一个 动态链接库 包含头文件: #include <dlfcn.h> 函数定义: void * dlopen( const char * pathname, int mode ); 函数描述: 在dlopen的()函数以指定模式打开指定的动态连接库文件,并返回一个 句柄 给调用进程。使用dlclose()来卸载打开的库。 mode:    RTLD_LAZY 暂缓决定,等有需要时再解出符号    RTLD_NOW 立即决定,返回前解除所有未决定的符号。   RTLD_LOCAL   RTLD_GLOBAL 允许导出符号   RTLD_GROUP   RTLD_WORLD 返回值:    打开错误返回NULL   成功,返回库引用 编译时候要加入 -ldl (指定dl库)    例如   gcc test.c -o test -ldl   dlopen()是一个强大的 库函数 。该函数将打开一个新库,并把它装入内存。该函数主要用来加载库中的符号,这些符号在编译的时候是不知道的。比如 Apache Web 服务器利用这个函数在运行过程中加载模块,这为它提供了额外的能力。一个配置文件控制了加载模块的过程。这种机制使得在系统中添加或者删除一个模块时,都不需要重新编译了。   可以在自己的程序中使用 dlopen()。dlopen() 在 dlfcn.h 中定义,并在

计算机组成原理复习

旧时模样 提交于 2019-12-17 19:12:30
title: 计算机组成原理复习 date: 2018-06-28 14:08:04 tags: 课程学习 1.计算机硬件包括:输入设备,输出设备,运算器,控制器,存储器 2.计算机软件一般分为两大类:一类应用软件,另一类叫系统软件,操作系统属于系统软件类 3.第一代计算机的逻辑部件采用的是电子管,1946-1957年; 第二代计算机的逻辑部件采用的是晶体管,1958-1964年; 第三代计算机的逻辑部件采用的是中小规模集成电路,1965-1971年; 第四代计算机的逻辑部件采用的是大规模及超大规模集成电路,1972至今 4.计算机系统由硬件系统和软件系统构成。 5.计算机系统的三个层次结构由内到外分别是硬件系统,软件系统和应用软件 6.用高级语言编写的程序称为源 程序,经编译程序或解释程序翻译后称为 目标程序 7.将源程序翻译成目标程序的软件是编译器或编译程序 8.程序设计语言一般分为3类:机器语言,汇编语言,高级语言 9.编译方式是使用编译程序把源程序编译成机器代码的 目标程序 ,并以机器程序 的形式保留 10.简要说明计算机系统的层次结构? 计算机系统具有层次性,它由多级层次结构组成。从功能上计算机系统可分为五个层次级别: 第一级是微程序设计级。这是一个硬件级,它由机器硬件直接执行微指令。 第二级是一般机器级,也称为机器语言级。它由微程序解释机器指令系统.这一级是硬件级。

原码、反码、补码知识详细讲解(此作者是我找到的讲的最细最明白的一个)

筅森魡賤 提交于 2019-12-17 10:24:20
本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助! 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1、机器数 一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011。如果是 -3 ,就是 10000011 。 那么,这里的 00000011 和 10000011 就是机器数。 2、真值 因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数 10000011,其最高位1代表负,其真正数值是 -3 而不是形式值131(10000011转换成十进制等于131)。所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。 例:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1 二. 原码, 反码, 补码的基础概念和计算方法. 在探求为何机器要使用补码之前, 让我们先了解原码, 反码和补码的概念.对于一个数,

C++ Primer (一)

二次信任 提交于 2019-12-16 14:24:58
Google C++ Style Guide 书籍:C++ Primer,C++标准程序库,Effective C++,C++ concurrency in Action, Linux多线程服务端编程,The Design and Evolution of C++ C++基础: 1. 读取数量不定的输入数据 while(std::cin >> value) while内返回其左侧运算符,即std:cin, IO库定义了从istream向bool转换的规则,当istream作为条件时,效果是这个流的状态,有效输入(未遇到错误),条件为真,无效输入(读到文件尾,不是value变量类型), 条件为假 键盘输入文件结束符,unix Ctrl+D 2. C++是静态数据类型的语言,它的类型检查发生在编译时,编译器必须知道程序中每一个变量对应的数据类型 3. 避免依赖于实现环境的行为,比如不同机器上int类型的尺寸可能是不一样的 4. 切勿混用带符号类型和无符号类型,计算前带符号数会自动转换为无符号数,如果计算结果为负数会出现错误 5. 'A' 表示单独字符,"A" 表示字符数组A,编译器会在字符数组末尾添加空字符'\0' 6. 列表初始化,如果丢失精度,编译器会报错 7. 内置类型变量在函数内(包括main),如果不初始化是未初始化值,在所有函数外面,如果不初始化会采用默认初始化

LTE下行功率分配方案分析

老子叫甜甜 提交于 2019-12-16 05:00:37
LTE中下行功率是采用分配方案而不是功率控制方案,详细说明其分配策略如下: 一、基本概念及关键参数 1、ρA: 表征没有导频的OFDM symbol(A类符号)的数据子载波功率和导频子载波功率的比值。 2、ρB: 表征有导频的OFDM symbol (B类符号)的数据子载波功率和导频子载波功率的比值。 3、PB : 该参数表示PDSCH上EPRE(Energy Per Resource Element)的功率因子比率指示,它和天线端口共同决定了功率因子比率的值,即表征不同的ρB/ρA值,细节参见3GPP TS 36.213。 界面取值范围:0~3 单位:无 实际取值范围:0~3 MML缺省值:无 建议值:单天线:0;双天线: 1。 参数关系:无 修改是否中断业务:否 (且不影响空闲模式UE) 对无线网络性能的影响:PB取值越大,Reference Signal Pwr在原来的基础上抬升得越高,能获得更好的信道估计性能,增强PDSCH的解调性能,同时减少了PDSCH(Type B)的发射功率,可以改善边缘用户速率。 4、PA :该参数表示PDSCH功率控制PA调整开关关闭且下行ICIC开关关闭时,PDSCH采用均匀功率分配时的PA值,即A类符号功率和RS信号功率的差值,PA=A类符号功率 - RS信号功率。 界面取值范围: DB_6_P_A(-6 dB); DB_4DOT77_P_A

C# 中的基本数值类型

ぐ巨炮叔叔 提交于 2019-12-15 14:11:30
在之前的文章中(地址: https://www.vinanysoft.com/c-sharp-basics/introducing/ ),以 HelloWorld 程序为基础,介绍 C# 语言、它的结构、基本语法以及如何编写最简单的程序有了初步理解。 接下来介绍基本的 C# 类型,继续巩固 C# 的基础知识。本系列文章到目前为止只用过少量的内置数据类型,而且只是一笔带过。在 C# 中有大量的类型,而且可以通过合并类型来创建新类型。 但 C# 有几种类型非常简单,是其他所有类型的基础,它们称为 预定义类型 (predefined type)或 基元类型 ( primitive type)。 C# 提供了 16 种预定义类型,如下图所示。其中包括 13 种简单类型和 3 种非简单类型。 所有预定义类型的名称都由全小写的字母组成。预定义的简单类型包括以下 3 种。 11 种数值类型。 不同长度的有符号和无符号整数类型。 用于科学计算的二进制浮点类型 float 和 double 。 一种用于金融计算的十进制高精度浮点类型 decimal 。与 float 和 double 不同, decimal 类型可以准确地表示分数。 decimal 类型常用于货币的计算。 一种 Unicode 字符类型 char 。 一种布尔类型 bool 。 bool 类型表示布尔值并且必须为 true 或

为什么一个byte的存储范围是-128~127?

让人想犯罪 __ 提交于 2019-12-12 15:55:00
为什么一个byte的存储范围是-128~127? 文本关键字:byte、字节、二进制位、反码、补码 文章目录 为什么一个byte的存储范围是-128~127? 一、byte 二、反码与补码 **1. 反码 补码 三、byte的数据范围 一、byte** 在计算机中,一个二进制位是最小的存储单元,由于是二进制,所以能存储的数字只能是0和1。显然,如果我们直接去操作每个二进制位将是很麻烦的过程,所以在编程中我们直接使用的是其他的数据类型,如:byte、int、float。这些数据类型能够使我们的数据存储更加方便,我们只需要关心他们能够存储多大范围和什么样类型的数据就可以了。 那么一个byte,也就是我们所说的一字节,他所占用的空间是8个二进制位。 1 byte = 8 bit(比特) 这8个bit就是8个二进制位,其中有一个是符号为,刚好可以用0和1来代表正负。那么这8个二进制位到底能够表示多大范围的数字呢?对于正数的进制转换相信难不倒大家,也可以参考底部的相关文章,我们先来看一下负数在二进制下是如何表示和转换的。 二、反码与补码 首先把公式立在这里: 正数的补码 = 原码 = 反码 负数的补码 = 反码 + 1 那么首先什么是原码呢?很简单,在我们不考虑符号的情况下,按照进制的转换方法将一个十进制数转换为二进制数,再添加上相应的符号位就完成了。符号位出现在最前(左)面一位,0代表正数