Java学习笔记——由位操作引出的字符编码

前言:前几天在搜关于Java的位操作的文章,看到一个人的Blog上做了程序,大致就是对于字符串的位移,然后说加点其他操作就是一个加密程序。哎……不知道他有没有试过,想想也知道,数据位移了以后移出的长度的数据是会被抛弃的,取而代之的是补零或填一,只有循环位移才能达到移来移去不损失数据的效果,而>>、<<之类的是不带循环的。自己测试了下还是发现个比较有趣的现象,就是中文的gbk编码貌似是按照拼音来记录的,不过我也没有研究过,只是从程序中得出的猜想而已,呵呵,还是满有趣的那。

//  位操作
import  java.io. * ;

class  JavaBit  {
    
public static void main(String[] args) throws java.io.UnsupportedEncodingException, IOException {
        BufferedReader bufR 
= new BufferedReader (new InputStreamReader(System.in));
        System.out.println (
"请输入字符串:");
        String str 
= bufR.readLine ();
        
byte[] bitArray = str.getBytes ();
        System.out.println (
"输入的字符串为:"+new String(bitArray, "gbk"));
        
int i = 0;
        
for (;i<bitArray.length;i++{
            bitArray[i] 
= (byte)(bitArray[i] >> 1);
        }

        System.out.println (
"移位的字符串为:"+new String(bitArray, "gbk"));
        
for (i = 0; i<bitArray.length; i++{
            bitArray[i] 
= (byte)(bitArray[i] << 1);
        }

        System.out.println (
"移回的字符串为:"+new String(bitArray, "gbk"));
        
        System.out.println (
"字符串长度为:"+i);
        System.out.println (i
+"的二进制表示为:"+Integer.toBinaryString (i));
        i 
= i<<3;
        System.out.println (
"移位后的数值为:"+i);
        System.out.println (i
+"的二进制表示为:"+Integer.toBinaryString (i));    
    }

}

我输入:你是猪头三,位移后的结果是:怦邈茺膂孥濑,当然是其他连不起来的字了,然后我再移回来(损失精度),也就是说后面补了个0,结果是:拟势个朱潭赛,呵呵,蛮有趣的吧。当然知道它编码顺序的人看了就不觉得有趣了,呵呵。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值