在java中如何用for循环把一个十进制数转换成二进制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在java中如何用for循环把一个十进制数转换成二进制相关的知识,希望对你有一定的参考价值。

    进制转换的思想

    抓住关键点,不管多少进制,一个数的值是不变。

    先搞清楚进制衡量了什么:n进制实际上代表一个数位与相邻数位之间的权重比,简单点说,相邻两位,一个高位的值代表n个低位。

    一个n进制的数,转换为一个m进制的数,基本过程就是反复的——对n进制表示的m取余,除以n进制表示的m。为什么不直接写除以m呢?举个例子,假设十进制数99转换为2进制,那么过程就是反复——取余,除以2;看起来是除以m了;那反过来,如果把二进制数1100011(十进制数99)转换为十进制呢?这是时候应该对1010(十进制数10)取余,除以1010。

    按问题要求代码如下:

    public static void main(String[] args)

           int a = NUM; // NUM代表十进制数

           String binary = ""; // binary代表最后二进制字符串

           for(; a != 0; a /= 2)

                   binary = a % 2 + binary;

           

    实际上Java中已经提供了这种工具类,Integer.toBinaryString(int a)就可以实现该转换。

参考技术A import java.io.*;
import java.util.*;
public class Test

/**因为最终的余数需要倒序输出,采用栈来记录*/
public static void bdzd(int num , LinkedList<Integer>stack)
if(num == 0) stack.push(0); display(num , stack); return;

int sig = num / Math.abs(num); //记录符号

num = Math.abs(num); //忽略符号
int qt = num / 2;//商
int rem = num % 2;//余数
stack.push(rem);
num = qt;

while(qt != 0)
qt = num / 2;
rem = num % 2;
num = qt;
stack.push(rem);


display(sig , stack); //打印结果


public static void display(int sign , LinkedList<Integer>stack)
if(sign < 0)
System.out.print("-"); //计算机中负数的二进制需要用补码表示,与这里不同

while(stack.size() > 0)
System.out.print(stack.pop());

System.out.println();


public static void main(String[] args)
LinkedList<Integer> stack = new LinkedList<Integer>();
for(int i = -5; i <= 5; i++ )
bdzd(i,stack);


参考技术B static String toBinaryString(int i)
以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式。
static String toHexString(int i)
以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式。
static String toOctalString(int i)
以八进制(基数 8)无符号整数形式返回一个整数参数的字符串表示形式。
你看下Java API,这个是Integer的方法。
参考技术C 用scanf输入type后,scanf只读取了type的数据,而没有读取输入type之后的回车,缓冲区里还有一个回车,所以当再调用gets()后,只读取了一个回车,所以就没有输出了
如果想用gets()读取的话,要先清空缓存,用这个函数fflush(stdin)
参考技术D String x;//二进制数
for(num;num>=2;num/2)
x+=num%2;

num是十进制的数
对于没有小数的十进制可以转换了

java中如何用json接收一个list?

比如说我用了struts2 在action中得到一个list
在后台如何传递到前台?以及在前台jsp页面如何接收这个list?

可以使用三种方式,用json接收一个list,方法如下:

1、使用org.json.JSONArray包:

JSONArray json = new JSONArray();
   for(User u : list)
       JSONObject jo = new JSONObject();
       jo.put("id", u.getId());
       jo.put("title", u.getName());
       json.put(jo);
   

2、使用net.sf.json包下JSONArray的静态方法:fromObject(list), 这是网上大多是直接用此方法快捷转换JSON,但是对于list的要求就是其中的元素是字符串或对象,否则JSON不知道你想要的是什么数据:

JSONArray json = JSONArray.fromObject(list);

3、使用google的gson,将list转为json字符串:

Gson gson = new Gson(); 
String str = gson.toJson(list);
参考技术A list可以直接传到前台的,用c标签 <c:forEach>标签可以直接得到,但在action中要写该list的有关的get set方法本回答被提问者采纳 参考技术B 第一种方法 在action类中 声明一个list集合如:private List list;生成getter和setter方法;
然后通过方法action的方法给list赋值;然后页面通过struts2标签接受即可;
<s:iterator var="ent" value="list">
<s:if test="%#statu.odd">
<font color="red"><s:property value="#ent" />
</font>
</s:if>
<s:else>
<s:property value="#ent" />
</s:else>
</s:iterator>

第二种方法 首先 在action类中;private String jsonData;生成getter和setter方法;
通过json 驱动包带的JSONArray json = JSONArray.fromObject(list);转换成json格式
setJsonData(json.toString());
在你返回成功跳到的页面 定义 :$(jsonData);
然后通过ajax 接受 就可以了!
建议使用第一种方法

以上是关于在java中如何用for循环把一个十进制数转换成二进制的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB中如何用for 循环将结果代入矩阵中?

java中如何用程序判断字符串是不是为十进制数

python中如何用for循环输出一个列表

在JS中如何用for循环数字做出一个V字形

Oracle中如何用SQL把字符串转换成整型

Oracle中如何用SQL把字符串转换成整型