java运算符及二进制、八进制、十六进制

前提1:假设“1个二进制位”等同于“1位二进制”。

前提2:一个字节(byte)是8个二进制位(bit)

为什么一个字节是8个二进制位呢?

首先,据说字节,原意是用于表示一个完整的字符。

计算机出现之前,用的是BSD编码,用4个二进制位表示一个字符。所以可以说,当时一个字节是4个二进制位。

后来随着需求的增加,4个二进制位所能表达的范围过小(只能表示16中字符),进而出现了6个二进制位表示一个字节的编码:BCDID,

进而又出现了用7个二进制位的“基础ASCII码”/“标准ASCII码”(可表示128个字符,但缺少一些常用的控制字符或通讯专用字符,如“制表符”),

进而又出现了用8个二进制位的“扩展ASCII码”(可表示256个字符),

到此,一个字节用8个二进制位表示的做法已被肯定。此后的发展是在此基础上,发展字符的兼容性。

但随着计算机的国际化,即使是扩展ASCII码,一个字节仍然不能展示一个汉子。只能展示一个任意字母或常用字符。

从而,出现了GB2312编码,用两个扩展ASCII码表示一个汉字。

为了使全世界各国文字都能兼容,于是出现了unicode编码(两个字节表示一个字符)。

(另外,utf-8/utf-16只是针对unicode编码的传输标准,并非上面所说的编码概念)

(另外,C/C++的标准中,从来没有规定1byte等于8bit。它只规定了:sizeof(char) = 1。但是现实中,1byte确实绝大部分都是8bit的。其源头是tcp/ip协议中,有这样的规定。所以,除非你做的系统不准备支持tcp/ip协议,否则,依循它的协议,使用1byte=8bit是最简单的。)


一、java运算符

先假设两个十进制变量:A=60,B=13


对应的二进制则为:A=00111100,B=00001101。

(以B为例,13除以2得6余1,6除以2得3余0,3除以2得1余1,1除以2得0余1。颠倒余数即为1101,一个字节是8位二进制,所以高位需要补零,即00001101)


则运算如下:

“按位与(&)”:A & B = 00111100 & 00001101= 00001100 (十进制:12)

“按位或(|)”:A | B = 00111100 | 00001101= 00111101 (十进制:61)

“按位异或(^)”:A ^ B = 00111100 ^ 00001101= 00110001 (十进制:49)

“按位补(~)”: ~ A = ~00111100 = 11000011 = - 00111100 (十进制:-60)

“按位左移(<<)”:A << 2 = 00111100 << 2 = 11110000 (十进制:240)




二、java 二进制数字、八进制数字、十六进制数字

二进制数字:     Log.i(TAG,"二进制数字:"+0b11);     输出:二进制数字:3.
八进制数字:     Log.i(TAG,"八进制数字:"+011);       输出:八进制数字:9.
十六进制数字: Log.i(TAG,"十六进制数字:"+0x11);  输出: 十六进制数字:17.

注:二进制数字添加0b标记,八进制数字添加0,十六进制数字添加0x。(0是零)。
注:java数据类型所占字节数
byte         1个字节    8位二进制
boolean   不明确
char         2个字节    16位二进制
short        2个字节    16位二进制
int            4个字节    32位二进制
float         4个字节    32位二进制
long         8个字节    64位二进制
double     8个字节    64位二进制


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值