进制

生活中的进制:七进制(一周)、十二进制(12小时制)、二十四进制(24小时制)、六十进制(分钟)

对于整数,有四种表示方式:
  二进制(binary):0,1 ,满 2 进 1.以 0b 或 0B 开头。
  十进制(decimal):0-9 ,满 10 进 1.
  八进制(octonary):0-7 ,满 8 进1. 以数字 0 开头表示。
  十六进制(hex):0-9 及 A-F,满 16 进1. 以 0x 或 0X开头表示。此处的A-F不区分大小写。

        int a = 10;
int b = 0b10; // 二进制以0b开头
int c = 010; // 八进制以0开头
int d = 0X10; // 十六进制以0x开头 System.out.println(a); // 10
System.out.println(b); // 2
System.out.println(c); // 8
System.out.println(d); // 16

所有数字在计算机底层都以二进制形式存在。

二进制数分为两种:
  无符号二进制,只能存储正整数
  有符号二进制,可以存储正数和负数,最高位为符号位,0表示正数,1表示负数

计算机以补码的形式保存所有的整数,验证:

// 计算机内部是使用补码来存储和表示值
System.out.println(0b00000000000000000000000000000101); // 5
System.out.println(0b11111111111111111111111111111011); // -5

正数的补码与其原码相同;负数的补码是在其反码的末位加1。

原码:直接将一个数值换成二进制数。

反码:是对原码按位取反,只是最高位(符号位)保持不变。

原码
  原始二进制值
反码
  正数:反码和原码相同,如5的反码 00000000 00000000 00000000 00000101
  负数:符号位不变,其余各位取反,如­5的反码 11111111 11111111 11111111 11111010
补码
  正数:补码和原码相同,如5的补码 00000000 00000000 00000000 00000101
  负数:反码+1,如­5的补码 11111111 11111111 11111111 11111011

  

Java整数常量默认是int类型,当用二进制定义整数时,其第32位是符号位;当是long类型时,二进制默认占64位,第64位是符号位

byte 的范围:-128 ~ 127

byte范围:-128 - 127
1的原码(补码):
0000 0001 -1的原码:
1000 0001
反码:
1111 1110
补码:
1111 1111 127的原码(补码):
0111 1111 -127的原码:
1111 1111
反码:
1000 0000
补码:
1000 0001

最小负数-128补码:1000 0000

进制的基本转换

十进制 二进制互转
  十进制转成二进制 除以2取余数
  二进制转成十进制 乘以2的幂数

15 = 1 * 2^0 + 1 * 2^1 + 1 * 2^2 + 1 * 2^3

14:0b1110

类似的方法,可以进行下面的互转
二进制 八进制互转
二进制 十六进制互转
十进制 八进制互转
十进制 十六进制互转

算术运算符

前缀自增自减和后缀自增自减的区别:
  前缀自增自减
    先进行自增或自减,然后再执行表达式
  后缀自增自减
    先执行表达式,然后再进行自增或自减

        int x = 1;
System.out.println(++x); // 2,先加1,再输出
int y = 1;
System.out.println(y++); // 1,先输出,再加1

注意:

  如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。 但被模数是负数就另当别论。
  对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。 例如:int x=3510;x=x/1000*1000; x的结果是?
  “+”除字符串相加功能外,还能把非字符串转换成 字符串.例如(将字符串与数值相加时会进行拼接):

System.out.println("5+5="+5+5);  // 打印结果是:5+5=55
System.out.println("" + d + e); // 借助空字符串,实现将数字拼接

赋值运算符

符号:=
扩展赋值运算符: +=, -=, *=, /=, %=

不支持如下写法:

int a=b=c=1;

比较运算符(关系运算符)

注1:比较运算符的结果都是boolean型,也就是要么是true,要么是false。
注2:比较运算符“==”不能误写成“=” 。

System.out.println(1<2<3);  // 不支持此写法
System.out.println('a'<'b'); // 可以用于字符的比较,比较的是ascii码

  

逻辑运算符

逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 && x<6 。
“&”和“&&”的区别:
  单&时,左边无论真假,右边都进行运算;
  双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算,System.out.println(false && 1/0>1); // 除数为0,执行不会报错,说明右侧未执行

和“||”的区别同理,双或时,左边为真,右边不参与运算。
异或( ^ )与或( | )的不同之处是:对于 ^ 而言,当左右都为true时,结果为false。【两边不同为true,相同为false】

位运算符

针对二进制的位进行运算,需要将值转换为二进制后进行按位运算

位运算符和逻辑运算符的区别:
  逻辑运算符是针对布尔值进行运算
  位运算符是针对二进制数的位进行运算

与:两位都为1,则为1,否则为0
或:只要有一个1,则为1,否则为0
非:如果为1,则为0,如果为0,则为1
异或:如果两位相同,则为0,否则为1
左移:将二进制的所有位都向左移指定的位数,末尾补0
右移:将二进制的所有位都向右移指定的位数,高位补符号位
无符号右移:将二进制的所有位都向右移指定的位数,高位补0

三元运算符(也称为三目运算符、条件运算符)

一目运算符 i++

二目运算符 a+b

格式:(条件表达式)?表达式1:表达式2;
  如果条件为true,运算后的结果是表达式1执行结果;
  如果条件为false,运算后的结果是表达式2执行结果;

类型兼容,意思是冒号两边的类型是此处定义的String
String res = a > 3? "1>3":true;

package com.uncleyong;

public class TestOperator {
public static void main(String[] args) {
//取模
int r = 10 % 3;
System.out.println(r); // 1 //自增
int i = 10; //i++: 先取 i 值, 在运算(i = i + 1)
int j = i++;
System.out.println(j);
System.out.println(i); int m = 100;
//++m: 先运算(m = m + 1), 后取值
int n = ++m;
System.out.println(n);
System.out.println(m); //+: 字符串相加
String str = "abc";
String str2 = "def"; String str3 = str + str2; //abcdef
System.out.println(str3); //如果对负数取模,可以把模数负号忽略不记
System.out.println(10 % -3); // 1
//如果被模的数是负数, 则先对其绝对值进行取模运算, 结果在加上一个负号
System.out.println(-10 % 3); // -1 System.out.println(-10 % -3); // -1 //整数之间做除法时,只保留整数部分而舍弃小数部分
int x=3510;
x= x / 1000 * 1000;
System.out.println(x); // 3000 //+ 除字符串相加功能外,还能把非字符串转换成字符串
String str4 = "1";
System.out.println(str4 + 100); // 1100 //逻辑运算符
int a = 10;
int b = 20; // &: 与 运算符, 当且仅当两边都为真时, 表达式的结果为 true
System.out.println(a > 5 & b < 30); // true
System.out.println(a > 15 & b < 30); // false
System.out.println(a > 5 & b < 20); // false // |: 或 运算符, 当且仅当两边都为假时, 表达式结果为 false
System.out.println(a > 5 | b < 30); // true
System.out.println(a > 15 | b < 3); // false
System.out.println(a > 5 | b < 20); // true // ^: 异或 运算符, 当且仅当两边的表达式的结果不同时为 true, 否则为 false
System.out.println(a > 5 ^ b < 30); //false
System.out.println(a > 15 ^ b < 3); //false
System.out.println(a > 5 ^ b < 20); //true // !: 取反 运算符.
System.out.println(!(a > 5)); //false //短路逻辑运算符: &&, ||. 若 短路逻辑运算符前的表达式已经可以确定整个表达式的值,
//则不再判断 短路运算符后边的表达式的值
System.out.println(a > 15 && (10 / 0 == 1)); //false //位运算符
int c = 3; //0000 0011 //左移运算符
System.out.println(c << 2); //0000 1100 -> 12 3 * (2*2) = 12 //右移运算符
System.out.println(c >> 2); //0000 0000 -> 0 3 / (2 * 2) = 0; //无符号右移运算符
int d = -1;
System.out.println(d >> 1); //-1
System.out.println(d >>> 1); //2147483647 //& 位运算符
/*
* 0000 0010
* & 0000 0011
* ___________
* 0000 0010
*/
System.out.println(2 & 3); //2 //三元运算符
String e = d > 3 ? "d > 3" : "d <= 3";
System.out.println(e); // d <= 3 //编译不能通过, 因为 : 的两边必须是表达式, 且必须是类型兼容的表达式
//d > 3 ? System.out.println("a") : System.out.println("b"); String res = d > 3 ? ">3" : "<=3";
}
}

运算符优先级

从高到低的顺序:
1. 小括号( )
2. 一元运算:自增++、自减­­、非!
3. 乘*、除/、取余%
4. 加+、减­
5. 关系运算:> < >= <=
6. 相等运算:==、!=
7. 逻辑与 &&
8. 逻辑或 ||
9. 赋值运算:=、+=等
注:当运算符较多时,建议使用小括号控制运算的顺序

练习题(参考答案已放在Q群文件中)

1、结果是?

        int m = 3;
int n = m++ + ++m;
System.out.println("m:"+m+", n:"+n);

2、将数字反转后输出,如将166889反转,输出988661

Java【第二篇】基本语法之--进制、运算符的更多相关文章

  1. java基础语法以及进制的转换

    关键字 关键字: 被Java语言赋予特定含义的单词 关键字特点 组成关键字的字母全部小写 关键字注意事项 goto和const作为保留字存在,目前并不使用 类似IDEA这样的集成工具,针对关键字有特殊 ...

  2. Java中byte与(16进制)字符串的互相转换

    java中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示,所以我们就可以把每个byte转换成两个相应的16进制字符,即把byte的高4位和低4位分别转换成相应的16 ...

  3. Java字节数组转按radix进制输出

    代码如下: public class Main_bytesToStr { public static void main(String[] args) throws IOException { // ...

  4. Java的浮点数和整数的进制转换

    整数的表达 –原码:第一位为符号位(0为正数,1为负数) –反码:符号位不动,原码取反 –负数补码:符号位不动,反码加1 –正数补码:和原码相同     -6      5 原码 10000110 0 ...

  5. 【java】RC4加密转16进制获取长度为40的不重复优惠码字符串 【未优化版本】

    需求:需要一串给各机构独有的优惠码 间接需求:固定长度.不重复.没有规律可循 实现思想如下: 1.首先获取一个UUID 2.去除UUID中的“-” 3.小写转大写 4.获取一个固定长度字符串 5.按照 ...

  6. Java 字符串、数值与16进制相互转化

    字符串.数值与16进制相互转化 首先创建一个工具类: package c; public class DataUtils { /* * 字节数组转16进制字符串 */ public static St ...

  7. iOS阶段学习第二天笔记(数据类型与进制)

    iOS学习(C语言)知识点整理笔记 1.C语言32个关键字 一.存储相关 1)auto 声明自动变量 2)register 声明寄存器变量 3)volatile 声明的变量在程序执行过程中可能被隐含的 ...

  8. java中将汉字转换成16进制

    技术交流群:233513714 /** * 将汉字转换车16进制字符串 * @param str * @return st */ public static String enUnicode(Stri ...

  9. 【JAVA随摘笔记一】进制转换

    // 十进制转其它进制(二进制,八进制,十六进制) ; System.out.println(Integer.toBinaryString(k));// 转二进制 10001 System.out.p ...

随机推荐

  1. iOS-----------关于UDID

    最近看友盟的SDK更新日志:(设备系统的正常升级不会改变OpenUDID) Apple公司于2013年5月1日开始,拒绝采集UDID的App上架App Store. 为适应Apple公司的这一政策,2 ...

  2. java基础知识总结二

    1. synchronized和reentrantlock异同 相同点 都实现了多线程同步和内存可见性语义 都是可重入锁 不同点 实现机制不同 synchronized通过java对象头锁标记和Mon ...

  3. dotnet core 入门命令

    官方资料: https://docs.microsoft.com/zh-cn/dotnet/core/tools/dotnet-restore?tabs=netcore2x 常规 项目引用 NuGet ...

  4. 安装MySQL8.0 遇到的3个小错误

    过去公司都是用的5.7 系列的MySQL,随着8.0的发版,也想试着升级一下.遇到了两个小错误,记录在此. 路径设置: 安装包路径:/data/mysql80/ 数据路径: /data/mysql/ ...

  5. SQL Server 2008初次启动

    一.关于安装 SQL Server 数据库的安装,经过自己的安装,总体还是比较容易,没有太多难度,安装包在网上也有很多,在此,就跳过安装的这一步. 二.初次启动SQL Server 安装完成数据库后, ...

  6. 指定IP地址进行远程访问服务器设置方法(windows系统)

    我们有很多服务器经常受到外界网络的干扰,入侵者们通过扫描3389端口爆破密码非法进入我们的服务器,这时,我们可以配置服务器IP 安全策略来限制一些IP访问,大大提高了服务器的安全. 实验环境:     ...

  7. Microsoft Excel行列限制简明列表

    Excel行列限制简明列表:数据出处+-----------------+-----------+--------------+---------------------+ | | Max. Rows ...

  8. ValueOf()和toString()

    var colors = ["red", "blue", "green"]; // 创建一个包含3 个字符串的数组 console.log( ...

  9. 文本分类实战(三)—— charCNN模型

    1 大纲概述 文本分类这个系列将会有十篇左右,包括基于word2vec预训练的文本分类,与及基于最新的预训练模型(ELMo,BERT等)的文本分类.总共有以下系列: word2vec预训练词向量 te ...

  10. Linux-基础学习(一)-基本命令

    开始今日份整理 1.Linux的文件目录操作 1.1 ls 简述:ls是list的缩写,用于列出指定目录或文件 常用的选项 1 -a:显示所有档案及目录(ls内定将档案名或目录名称为“.”的视为隐藏, ...