`

将键盘输入的数转为二进制形式

阅读更多
import java.util.Scanner;   
  
/**  
 * 将键盘上输入的一个字符串转换成十进制整数,然后打印出这个十进制整数对应的二进制形式。<br>  
 * <br>  
 * 这个程序要考虑输入的字符串不能转换成一个十进制整数的情况,并对转换失败的原因要区分出是数字太大,<br>  
 * 还是其中包含有非数字字符的情况。<br>  
 * 提示:十进制数转二进制数的方式是用这个数除以2,余数就是二进制数的最低位,<br>  
 * 接着再用得到的商作为被除数去除以2,这次得到的余数就是次低位,如此循环,直到被除数为0为止。<br>  
 * 其实,只要明白了打印出一个十进制数的每一位的方式(不断除以10,得到的余数就分别是个位,十位,百位),<br>  
 * 就很容易理解十进制数转二进制数的这种方式。  
 *   
 * @author 享受JAVA(java2000.net)  
 */  
public class T3 {   
  /**  
   * @param args  
   */  
  public static void main(String[] args) {   
    Scanner in = new Scanner(System.in);   
    String str = in.nextLine();   
    int num = 0;   
    try {   
      num = strToInt(str);   
    } catch (NumberFormatException ex) {   
      System.out.println(ex.getMessage());   
      return;   
    }   
    System.out.println("num=" + num);   
    System.out.println("二进制为:" + toBinaryString(num));   
  }   
  
  public static String toBinaryString(int num) {   
    StringBuilder b = new StringBuilder();   
    try {   
      while (num > 0) {   
        b.insert(0, num % 2);   
        num >>>= 1;   
      }   
      return b.toString();   
    } finally {   
      b.delete(0, b.length());   
      b = null;   
    }   
  }   
  
  public static int strToInt(String s) {   
    int result = 0;   
    boolean negative = false;   
    int i = 0, max = s.length();   
    int limit;   
    int multmin;   
    int digit;   
    if (max > 0) {   
      if (s.charAt(0) == '-') {   
        negative = true;   
        limit = Integer.MIN_VALUE;   
        i++;   
      } else {   
        limit = -Integer.MAX_VALUE;   
      }   
      multmin = limit / 10;   
      if (i < max) {   
        digit = Character.digit(s.charAt(i++), 10);   
        if (digit < 0) {   
          throw new NumberFormatException("字符串格式不正确: \"" + s + "\"");   
        } else {   
          result = -digit;   
        }   
      }   
      while (i < max) {   
        // Accumulating negatively avoids surprises near MAX_VALUE   
        digit = Character.digit(s.charAt(i++), 10);   
        if (digit < 0) {   
          throw new NumberFormatException("字符串格式不正确: \"" + s + "\"");   
        }   
        if (result < multmin) {   
          throw new NumberFormatException("数字超过最大允许范围:: \"" + s + "\"");   
        }   
        result *= 10;   
        if (result < limit + digit) {   
          throw new NumberFormatException("数字超过最大允许范围: \"" + s + "\"");   
        }   
        result -= digit;   
      }   
    } else {   
      throw new NumberFormatException("字符串为空: \"" + s + "\"");   
    }   
    if (negative) {   
      if (i > 1) {   
        return result;   
      } else { /* Only got "-" */  
        throw new NumberFormatException("不能只有负号: \"" + s + "\"");   
      }   
    } else {   
      return -result;   
    }   
  }   
}  


注解
StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符添加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。
分享到:
评论

相关推荐

    编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数

    编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数,代码

    键盘录入数据的转换与显示

    因为要将程序在唐都仪器上运行,输入的两个数的和要以十进制形式通过可编程接口芯片8255A在LED数码管上显示,所以,我直接在程序里输入了两个五位十进制数,然后将这两个数转换为二进制后存放在AX中,即先将其转换...

    ASCII及十六进制转换工具《建》

    (2)将二进制形式的IP地址与子网掩码做“与”运算,将答案化为十进制便得到网络地址; (3)将二进制形式的子网掩码取“反”; (4)将取“反”后的子网掩码与IP地址做“与”运算,将答案化为十进制便得到主机地址...

    十四位数仿真科学计算器 2.14 绿色版(语音型含注册码).

    显示屏数字可随时转换为下列形式进行计算:十六进制、十进制、八进制、二进制、人民币中文大写形式、人民币数字形式(例如:1435.75、人民币壹仟肆佰叁拾伍圆柒角伍分、¥1435.75)。以上各种转换与计算结果可选择...

    十四位数仿真科学计算器(语音型)

    显示屏数字可随时转换为下列形式进行计算:十六进制、十进制、八进制、二进制、人民币中文大写形式、人民币数字形式例如:1435.75、人民币壹仟肆佰叁拾伍圆柒角伍分、¥1435.75)。以上各种转换与计算结果可选择是否...

    仿真语音计算器v1.8

    显示屏数字可随时转换为下列形式进行计算:十六进制、十进制、八进制、二进制、人民币中文大写形式、人民币数字形式例如:1435.75、人民币壹仟肆佰叁拾伍圆柒角伍分、¥1435.75)。以上各种转换与计算结果可选择是否...

    仿真科学计算器(语音型) V2.14

    、八进制、二进制、人民币中文大写形式、人民币数字形式(例如:1435.75、人民币壹仟肆佰 叁拾伍圆柒角伍分、¥1435.75)。以上各种转换与计算结果可选择是否自动存入WINDOWS剪贴 板,并可自动输出在其它程序窗口的...

    十四位数仿真科学计算器(语音型)2.11

    显示屏数字可随时转换为下列形式进行计算:十六进制、十进制、八进制、二进制、人民币中文大写形式、人民币数字形式(例如:1435.75、人民币壹仟肆佰叁拾伍圆柒角伍分、¥1435.75)。以上各种转换与计算结果可选择...

    仿真科学计算器(语音型)

    5.显示屏数字可随时转换为十六进制、十进制、八进制、二进制形式进行计算,以上各种转换与计算结果可选择是否自动存入WINDOWS剪贴板,并可自动输出在其它程序窗口的当前光标位置,省去了按”Ctrl+V”的不便。...

    语音计算器(科学计算器软件)v2.14免费版.rar

    显示屏数字可随时转换为下列形式进行计算:十六进制、十进制、八进制、二进制、人民币中文大写形式、人民币数字形式。以上各种转换与计算结果可选择是否自动存入WINDOWS剪贴板,并可自动输出在其它程序窗口的当前...

    语音计算器下载 绿色版

    显示屏数字可随时转换为下列形式进行计算:十六进制、十进制、八进制、二进制、人民币中文大写形式、人民币数字形式(例如:1435.75、人民币壹仟肆佰叁拾伍圆柒角伍分、¥1435.75)。以上各种转换与计算结果可选择...

    科学计算器 计算器

    、八进制、二进制、人民币中文大写形式、人民币数字形式(例如:1435.75、人民币壹仟肆 佰叁拾伍圆柒角伍分、¥1435.75)。以上各种转换与计算结果可选择是否自动存入WINDOWS剪 贴板,并自动输入在其它程序窗口的...

    805881_语音计算器

    显示屏数字可随时转换为下列形式进行计算:十六进制、十进制、八进制、二进制、人民币中文大写形式、人民币数字形式(例如:1435.75、人民币壹仟肆佰叁拾伍圆柒角伍分、¥1435.75)。以上各种转换与计算结果可选择...

    你必须知道的495个C语言问题

    这导致空间浪费而且无法与外部数据文件进行“二进制”读写。能否关掉填充,或者控制结构域的对齐方式? 2.14 为什么sizeof返回的值大于结构大小的期望值,是不是尾部有填充? 2.15 如何确定域在结构中的字节偏移...

    《你必须知道的495个C语言问题》

    这导致空间浪费而且无法与外部数据文件进行“二进制”读写。能否关掉填充,或者控制结构域的对齐方式? 27  2.14 为什么sizeof返回的值大于结构大小的期望值,是不是尾部有填充? 28 2.15 如何确定域在结构中的...

    cmd操作命令和linux命令大全收集

    tftp -i 自己IP(用肉机作跳板时这用肉机IP) get server.exec:server.exe 登陆后,将“IP”的server.exe下载到目标主机c:server.exe 参数:-i指以二进制模式传送,如传送exe文件时用,如不加-i 则以ASCII模式(传送...

    C语言FAQ 常见问题列表

    o 3.10 我的编译器在结构中留下了空洞, 这导致空间浪费而且无法与外部数据文件进行 "二进制" 读写。能否关掉填充, 或者控制结构域的对齐方式? o 3.11 为什么 sizeof 返回的值大于结构的期望值, 是不是尾部有填充? ...

    你必须知道的495个C语言问题(PDF)

    部数据文件进行”二进制” 读写。能否关掉填充, 或者控制结构域 的对齐方式? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.11 为什么sizeof 返回的值大于结构的期望值, 是不是尾部有填充? . . ...

Global site tag (gtag.js) - Google Analytics