Byte:字节(B)
bit:位(b)
1 Byte = 8 bit
int = 4Byte=32bit
long = 8Byte=64bit
基于1024这个数进行换算
1TB=1024GB
1GB=1024MB
1MB=1024KB
1KB=1024B
1B=8b
空间
问题描述:
小蓝准备用 256MB 的内存空间开一个数组,数组的每个元素都是 32 位二进制整数,如果不考虑程序占用的空间和维护内存需要的辅助空间,请问256MB 的空间可以存储多少个 32 位二进制整数?
1个位等于1个bit(b),32个位等于32个bi
1个B等于8个b,32个位等于32/8=4个B
问题就转换为问:256MB可以换成多少个4个B
我们来换算一下:
256MB=256*1024KB=256*1024*1024B=268435456B
256MB总共有268435456个B,直接除以4即得答案。
答案:67108864
while(x!=0){
int a=x%10;//a存的是取出的每一个数位
x/=10;
}
如果是比较一个数字中的两个数位的大小
不妨用:
int a=2023;
String s=String.valueOf(a);
int c=s.charAt(0);
int d=s.charAt(1);
if(c==d)return true;
如果是想直接取出数字:
需要转换一下:
int c=s.charAt(0)-‘0’;
int d=s.charAt(1)-‘0’;
转不转换看自己需要!
强烈建议看一下如下文章 :
结合食用更佳~
int sum=0;
while(x!=0){
int a=x%10;//a存的是取出的每一个数位
x/=10;
sum+=a; //sum统计数位之和
}
int a=2023
2:2023/1000
0:2023/100%10
2:2023/10%10
3:2023%10
/:相当于删掉后面的0的总个数的数字
%:相当于保留/取出后面的数字
考试时候,忘记了怎么办?
不要慌,我们还有强大的计算器!!!
个位直接取模,这总是不会忘记的。
最高位直接除即可得
除最高位外,取出某个数,是用%10
中间的需要除多少再我们可以用计算器现推出来。
再%10即可。
以20463为例
先看最高位、个位
个位3:直接对10取模即得
最高位2:
直接除以10000即得最高位数2
分析规律:直接除以剔除掉最高位数,剩下的数位的10000
如20463得到2:把2剔除掉还剩0463四位,需要除10000(4个0)
再如2578487得到:把2剔除掉还剩578487六位,需要除1000000(6个0)
按照这个规律,可以继续处理剩余的位数。
0
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7EnUDy09-1691246451821)(https://cdn.acwing.com/media/article/image/2023/04/06/261358_bdc7fdb2d4-数位0.png)]
20463/1000可以得到20再%10便得到0
可以再发现规律,/完后会保留我们想要的最后一位数,再%10即可得到答案!
学习完后,可以写一下这道题:
【问题描述】
九进制正整数 (2022), 转换成十进制等于多少?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
以此题为例:
梳理一下进制转换的一些知识点
(abcd)M p=M,s:表示的是数字的长度
a*p^s-1+b*p^s-2+c*p^s-3+d*p^s-4
又如:4568
千位:4–>3
百位:5–>2
十位:6–>1
个位:8–>0
回到本题:
写成公式:2*9^3+2*9^1+2*9^0=1478
直接用计算机算即可,当然用程序也可以。
分析一下公式:
M进制数转10进制:
首先,得出二进制数中每个数的位置p
再求出当前这一位M的p次方
最后乘上每个数的位数即可。
比如:
数字:(abcd)M
公式:
(abcd)M p=M,s:表示的是数字的长度
a*p^s-1+b*p^s-2+c*p^s-3+d*p^s-4
具体到本题:
(2022)9
2*9^3+2*9^1+2*9^0=1478
答案:1478
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QTZwpiBe-1691246451822)(https://cdn.acwing.com/media/article/image/2023/04/06/261358_978b47ecd4-进制.png)]
import java.util.*;
public class Main{
public static void main(String []args) {
Scanner sc=new Scanner(System.in);
int x=2022;
int a=1;
int res=0;
while(x!=0) {
res+=(x%10)*a;
a=a*9;
x/=10;
}
System.out.println(res);
}
}
进而推广到一般情况:
实际上是把位数取出来,再进行相乘
import java.util.*;
public class Main{
public static void main(String []args) {
Scanner sc=new Scanner(System.in);
int x=题目所给数字;
int a=1;
int res=0;
while(x!=0) {
res+=(x%10)*a;
a=a*M;
x/=10;
}
System.out.println(res);
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I3ahZIGv-1691246451822)(https://cdn.acwing.com/media/article/image/2023/04/07/261358_6fc36dbfd4-十进制.png)]
十进制转B进制可以看y总这张公式
每次**/b
可以依次取出a0、a1、...ak-1
**
返回的是字符串形式
转换为二进制:转换前的数据类型**.toBinaryString(i)**
转换为八进制:转换前的数据类型**.toOctalString(i)**
转换为十六进制:转换前的数据类型**.toHexString(i)**
转换为n进制: Integer.toString(a, n)
示例:
public class Main {
public static void main(String[] args) {
int a = 176;
System.out.println(a + "的二进制是:" + Integer.toBinaryString(a));
System.out.println(a + "的八进制是:" + Integer.toOctalString(a));
System.out.println(a + "的十六进制是:" + Integer.toHexString(a));
System.out.println(a + "的n进制是:" + Integer.toString(a, n));
}
}
由于时间关系,其他进制不在这一一赘述。
可以看这篇博客,比较详细全面: