进制进制进制~转换

从刚学计算机器就对进制转换有着莫名的反感,2进制 8进制 10进制 16进制各种转换。

下面就说下逻辑地址转换成物理地址的求法吧

首先,用户输入一个16进制的数字cin>>hex>>logic_add;   hex的意思是告诉计算机输入的数是以16进制方式输入的

这个时候你要是输出cout<<logic_add;  你会发现输出的是把这个16进制的数转换为10进制以后输出的结果

cout<<hext<<logic_add;这样输出的才是16进制。

经过以上对比,原来计算机不管你是以什么进制方式输出的最后都以10进制形式显示在你面前。

接着输入你的页面大小,如果是1kb=1024b=210

这时候用你的     逻辑地址/页面大小=页号.....页内地址

写这个的时候我觉得我自己笨的要死,我在想逻辑地址是16进制的  页面大小是10进制的一个数  他们之间相除用不用进制转换之类的,我就一直试啊在此期间不停的让他们进制统一!!!

一瞬间突然想明白了,在计算机里你无论是以什么方式什么进制输入的最后都变成2进制,不需要你自己转换进制,最后的商打印出的是10进制(在计算机内部算出的结果是2进制,默认输出的是10进制)。

哎,所以

cin>>hex>>logic_add;
int a=logic_add/page_size*1024;//页号

int b=logic_add%page_size*1024;//页内地址

这就完事了!!!!!!!!

之后你再去查页表找到对应的物理块号c

c*page_size+b;//物理地址,十进制的

cout<<hex<<c*page_size+b;//16进制的

就是么简单,真是够了,有些时候特别简单的问题自己不认真思考真的是不能很好理解。

老师上课讲给一个逻辑地址:0A5C  页面大小1kb=210    

0A5C/2^10   商就是前6位  余数就是后10位

这么理解:0A5C化成2进制一共16位0000 1010 0101 1100 除以2的10次方(2进制位100 0000 0000)就相当于十进制100除以10小数点向前移动1位

那么2^10  就是二进制的小数点向前移动10位  (整数小数在末尾)

不知道我说明白没~

欢迎指正~~~~

奋斗中的我,十一就不回家了~哎~~~所以挺闹心的,大家都走了,我也心不在焉。希望明天一切顺利

时间: 2024-08-05 19:36:04

进制进制进制~转换的相关文章

QT 16进制 ASII &nbsp; 10进制 转换

 //16进制字符串转字节数组     static QByteArray HexStrToByteArray(QString str)     {         QByteArray senddata;  //发送数据         int hexdata,lowhexdata;         int hexdatalen = 0;         int len = str.length();  //求出发送字符传唱度         senddata.resize(len/2); /

JS-011-颜色进制转换(RGB转16进制;16进制转RGB)

在网页开发的时候,经常需要进行颜色设置,因而经常需要遇到进行颜色进制转换的问题,例如:RGB转16进制:16进制转RGB),前几天在测试的时候,发现网站的颜色进制转换某类16进制颜色(例如:#000080,#FA08FA)转换时总是提示颜色非法,看了一下 js 源码,发现其进制转换的方法是错误的.找了一下度娘和谷大爷,最终写了一个颜色转换的小方法,源码如下所示: String.prototype.colorHex2Rgb = function(){ var reg = /^#([0-9a-fA-

Java 10进制转2、8、16进制转换 / 2、8、16进制转10进制转换

public static void main(String[] args) { int i = 10; System.out.println("***********10进制转换2进制.8进制.16进制************"); System.out.println(Integer.toBinaryString(i)); // 10转换2进制 System.out.println(Integer.toOctalString(i)); // 10转换8进制 System.out.p

C# 10进制与62进制互转 数据大无压力 10进制与72,96进制任意转换

因项目需要把10进制的ID转换成62进制的字符串,分享给别人. 于是在网上搜索了很多算法,但都未能满足需要,项目里的ID是固定算法算出来的18~20位数据的ulong整型. 如:17223472272256398107,509488277152981097. 网上找的算法问题在于,将ulong的值转换62进制的字符串后,再将字符串转换成ulong值时会不准确. 于是各种测试与假象问题所在,最后确定算法确实没有问题,于是开始怀疑数据类型的问题. 果然,原因是使用了Math.Pow(double x

javascript 10进制和64进制的转换

原文:javascript 10进制和64进制的转换 function string10to64(number) { var chars = '0123456789abcdefghigklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ-~'.split(''), radix = chars.length, qutient = +number, arr = []; do { mod = qutient % radix; qutient = (qutient - m

PHP进制转换[实现2、8、16、36、64进制至10进制相互转换]

自己写了一个PHP进制转换程序,一个类吧,第一次写这个东东,写这个东东,在处理文本文件时能用得到. 可以实现: 10进制转换2.8.16.36.62进制2.8.16.36.62进制转换10进制 有点要注意下,2.8.16进制转换时,使用的是系统的自己的函数. 所以,不管怎么高精度转换值可能大于2147483646. 另外, 32进制低精转换,最大值:2147483646: 32进制高精转换,最大值:77309411327: 64进制高精转换,最大值:133143986175. jinzhi.ph

javascript 10进制和62进制的转换

function string10to62(number) { var chars = '0123456789abcdefghigklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ'.split(''), radix = chars.length, qutient = +number, arr = []; do { mod = qutient % radix; qutient = (qutient - mod) / radix; arr.unshift(char

python中2进制、10进制、16进制等之间的转换

10转2: bin(8) # '0b1000' 2转10: int('1000', 2) # 8 10转16: hex(15) # '0xf' 16转10: int('f', 16) # 15 2进制和16进制中间通过转10进制可以相互转换

十进制转换成十六进制、16进制转2进制

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <locale.h> int main() { int i,v; char bs[33]; char b[33]; char hs[9]; char h[9]; char s[4]; char *e; // 十进制整数转二进制串: i=1024; ltoa(i,b,2); sprintf(bs,"%032s&quo

java程序练习:x进制转Y进制

/*X进制到Y进制转换*/ /*Step1.提示用户输入数据的进制X *Step2.接收用户输入的数据,保存到X * Scanner方法 *Step3.接收用户输入X进制的数据,保存到num *Step4.提示用户输入输出数据的进制Y *Step5.接收用户输入的数据,保存到Y * Scanner方法 *Step6.十进制=每一位上的(系数*X^权次幂)相加,保存到a * X进制转换十进制 *Step7.Y进制=a/Y,取余数,直到商为零,余数反转,保存到b * 十进制转换Y进制 *Step8.