复习笔记1 进制以及进制转换

来源:互联网 发布:淘宝刷钻平台网站 编辑:程序博客网 时间:2024/05/20 13:04
import java.io.IOException;public class Test2{public static void main(String[] args) throws IOException{// java 中 10 8 16进制常数的写法System.out.println(512);System.out.println(01000);System.out.println(0x200);System.out.println("=========================================>");// 对于负数有符号位移和无符号位移有差别// 有符号位移会自动高位补1,无符号将补0,// 也就是说-1有符号右移1位为-1,无符号右移1位为integer最大值System.out.println((-1 >> 1) == (-1 >>> 1));System.out.println("=========================================>");// 打印src的 2 4 8 16 32进制int src = -5;System.out.println(toUnsignedString(src, 1));System.out.println(toUnsignedString(src, 2));System.out.println(toUnsignedString(src, 3));System.out.println(toUnsignedString(src, 4));System.out.println(toUnsignedString(src, 5));System.out.println("=========================================>");//正负数转换的方法src = -100;System.out.println(-src);System.out.println(conversion(src));System.out.println("=========================================>");//char 可以参加运算实际上是由于他存储的是整数//而由于char是无符号的,所以需要17位来表示,//所以才会看起来像intSystem.out.println('㮆');System.out.println(((char)-50298));System.out.println("=========================================>");//减减的实现方式//由于计算机不存在减法,减法也是用加法算的//所以一个整数加上这个整数类型的无符号最大值//就相当于是自减,有符号的看起来像是加了一个//-1,但计算机并没有负数的概念int x = 355;System.out.println(--x);System.out.println((((x + 255) & 0xff) + (0xffffff00 & x)));System.out.println(x + 0xffffffff);System.out.println("=========================================>");}public final static char[] digits ={        '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c',        'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',        'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};/** * 无符号进制转换 *  * <p> * 每次取出传入 i 的最后 shift 位,并将该值转化为10进制的值进行查表<br> * 最后以倒叙的型式组成字符串 *  * @param i 需要转换的整数 * @param shift 表示偏移量,1为2进制,2为4进制,3为8进制,4为16进制, 5为32进制 * @return 表示该进制型式的字符串 */public static String toUnsignedString(int i, final/*此处final仅在编译期有效*/ int shift){// 该字符数组用来保存每一位的字符表现型式char[] buf = new char[32];// 字符指针,表示转换后的第几位int charPos = 32;// 基数,表示该进制逢多少进1int radix = 1 << shift;// 掩码,表示该进制中的最大数的2进制型式int mask = radix - 1;// 以倒序的型式换算//每次取shift表示的进制的位数//并将该值转化为相应的进制型式字符do{//假设该次为转换成2进制,那么每位最大值为1//即mask为1,以i & mask 的结果就为 0 和 1//所以在buf中,根据表digits只能有0和1的字符buf[--charPos] = digits[i & mask];i >>>= shift;}while (i != 0);return new String(buf, charPos, (32 - charPos));}/** * 正负数转换 * @param i 需要转换的数 * @return i 的相对数 */public static int conversion(int i){return ~i + 1;}}

原创粉丝点击