作文网站源码全屋装修公司

当前位置: 首页 > news >正文

作文网站源码,全屋装修公司,工程信息价在哪查询,seo运营java中能表示整数数据类型的有byte、short、char、int、long#xff0c;在计算机中占用的空间使用字节描述#xff0c;1个字节使用8位二进制表示。 数据类型字节数二进制位数表示范围默认值byte18-27 – 27-10char2160 – 216-1\u0000 (代表字符为空 转成int就是0)short216-…java中能表示整数数据类型的有byte、short、char、int、long在计算机中占用的空间使用字节描述1个字节使用8位二进制表示。 数据类型字节数二进制位数表示范围默认值byte18-27 – 27-10char2160 – 216-1\u0000 (代表字符为空 转成int就是0)short216-215 – 215-10int432-231 – 231-10long864-263 – 263-10L

  1. 原码、反码、补码 使用位运算前需要先弄清楚这几个概念 1.1. 原码 原码也叫机器码整数的二进制形式表示最高位为符号位。1表示负数0表示正数除去符号位后剩余其他的所有位是该整数的绝对值的二进制值。 int a 7; //原码二进制表示为00000000 00000000 00000000 00000111 int b -7;//原码二进制表示为10000000 00000000 00000000 000001111.2. 反码 反码需要区分是正数还是负数正数的反码跟原码相同负数的反码是除符号位外其他位取反即负数的最高位是1不变其他位0变成11变成0。 int a 7; //反码二进制表示为00000000 00000000 00000000 00000111 int b -7;//反码二进制表示为11111111 11111111 11111111 111110001.3. 补码 补码也需要区分是正数还是负数正数的补码跟原码相同负数的补码是反码最低位加1。 int a 7; //补码二进制表示为00000000 00000000 00000000 00000111 int b -7;//补码二进制表示为11111111 11111111 11111111 11111001说完了概念其实这里的原码是方便给人看的对于计算机运算来说都是使用补码形式操作。以下的位运算和移位运算都是基于补码进行的。
  2. 位运算 2.1. 位运算术语解释 位运算符含义解释备注按位与两个整数按位对齐当对齐的两位同时为1则结果为1否则为0按位或两个整数按位对齐当对齐的两位只要有一个为1则结果为1否则为0~按位非只能适用于一个整数的自身操作按位取反即1变成00变成1单目运算符^按位异或两个整数按位对齐当对齐的两位相同时为0否则为1 2.2. 位运算示例 我们以上面的int a 7和int b -7举例位运算的操作。 a的补码二进制为00000000 00000000 00000000 00000111 b的补码二进制为11111111 11111111 11111111 11111001 1、ab 按位与的结果补码为00000000 00000000 00000000 00000001 因为最高位为0所以为正数正数的原码反码补码都相同所以原码也为 00000000 00000000 00000000 00000001 转换成十进制的结果就是1。2、a|b 按位或的结果补码为11111111 11111111 11111111 11111111 最高位为1所以是负数。 反码补码-1得到反码11111111 11111111 11111111 11111110 原码反码除符号位取反得到原码10000000 00000000 00000000 00000001 由原码最高位为1可知该结果是负数除符号位外转换成十进制的结果是1所以最后按位或的结果就是-1。3、a^b 按位或的结果补码为11111111 11111111 11111111 11111110 最高位为1所以是负数。 反码补码-1得到反码11111111 11111111 11111111 11111101 原码反码除符号位取反得到原码10000000 00000000 00000000 00000010 由原码最高位为1可知该结果是负数除符号位外转换成十进制的结果是2所以最后按位或的结果就是-2。4、~a 取反结果补码形式11111111 11111111 11111111 11111000 最高位为1所以是负数。 反码补码-1得到反码11111111 11111111 11111111 11110111 原码反码除符号位取反得到原码10000000 00000000 00000000 00001000 由原码最高位为1可知该结果是负数除符号位外转换成十进制的结果是8所以最后按位或的结果就是-8。5、~b 取反结果补码形式00000000 00000000 00000000 00000110 最高位为0所以是正数。正数的原码反码补码都相同所以转换成十进制结果为6。2.3. 位运算应用于boolean操作 与、|或这两个位运算适用于boolean判断在这两个运算符的前后的条件都会计算不像java里的条件判断符并且 ||或者会短路判断符之前的满足条件后那么判断符之后的表达式不再计算。 public static void main(String[] args) {int a 5;if (a 0 a 0) {}System.out.println(条件后a a);if (a 0 | a 0) {}System.out.println(|条件后a a);if (a 0 a 0) {}System.out.println(条件后a a);if (a 0 || a 0) {}System.out.println(||条件后a a); }输出结果为 第一个判断a 0 a 0前一个判断已经是false了但是使用连接后一个表达式依然会计算a所以输出结果a的值加1等于6。 第二个判断a 0 | a 0前一个判断已经是true了但是使用|连接后一个表达式依然会计算a所以输出结果a的值加1等于7。 第三个判断a 0 a 0前一个判断已经是false了使用连接的不会再计算后一个表达式的值所以a的值不变。 第四个判断a 0 || a 0前一个判断已经是true了使用||连接的不会再计算后一个表达式的值所以a的值不变。
  3. 移位运算 3.1. 移位运算术语解释 移位运算符含义解释左移补码高位不包括符号位去掉指定位数然后剩下的位数整体向左移动指定位数低位使用0补齐右移补码低位去掉指定位数然后剩下的位数整体向右移动指定位数高位补上符号位即正数补0负数补1无符号右移这个主要是针对于负数来说的补码低位去掉指定位数然后剩下的位数整体向右移动指定位数高位包括符号位全部补上0 移位运算也是基于补码来操作的因为是采用二进制所以左移n位相当于该数乘以2的n次方、右移及无符号右移n位相当于该数除以2的n次方但是无符号右移是相对于负数来说的把符号位和其他高位都置为0。 3.2. 移位运算示例 我们仍以上面的int a 7和int b -7举例移位运算的操作。 a的补码二进制为00000000 00000000 00000000 00000111 b的补码二进制为11111111 11111111 11111111 11111001 1、a2 符号位不变高位去掉两位整体左移两位低两位补0结果为 补码00000000 00000000 00000000 00011100 高位为0即正数正数的原码反码补码相同所以原码补码转换为十进制结果为282、a2 符号位为0正数则符号位不变低位去掉两位整体右移两位高两位补0结果为 补码00000000 00000000 00000000 00000001 高位为0即正数正数的原码反码补码相同所以原码补码转换为十进制结果为13、a2 符号位为0正数低位去掉两位整体右移两位高两位包括符号位补0结果为 补码00000000 00000000 00000000 00000001 高位为0即正数正数的原码反码补码相同所以原码补码转换为十进制结果为14、b2 符号位不变高位去掉两位整体左移两位低两位补0结果为 补码11111111 11111111 11111111 11100100 高位为1即负数 反码补码-1得到反码11111111 11111111 11111111 11100011 原码反码除符号位取反得到原码10000000 00000000 00000000 00011100 由原码最高位为1可知该结果是负数除符号位外转换成十进制的结果是28所以最后按位或的结果就是-28。5、b2 符号位为1负数低位去掉两位整体右移两位高两位补1符号位为1结果为 补码11111111 11111111 11111111 11111110 高位为1即负数 反码补码-1得到反码11111111 11111111 11111111 11111101 原码反码除符号位取反得到原码10000000 00000000 00000000 00000010 由原码最高位为1可知该结果是负数除符号位外转换成十进制的结果是2所以最后按位或的结果就是-2。6、b2 符号位为1负数低位去掉两位高两位包括符号位都补0结果为 补码00111111 11111111 11111111 11111110 高位为0即正数正数的原码反码补码相同所以原码补码转换为十进制结果为1073741822。3.3. 移位运算注意事项 1、byte、short、char类型的整数再移位操作时会自动向上转为int类型后再操作移位。 2、int类型占32位long类型占64位当对这两个类型移位超出位数时相当于对要移动的位数取余再移位例如a32位取余为0相当于不移动a34取余为2相当于左移2位。long类型同理只是对64取余。
  4. 应用 1、不利用中间值交换两个整数 可推导出的结论是a ^ b ^ a ba ^ b ^ c a ^ (b ^ c)。所以对于两个整数ab交换可以使用异或位运算。 public static void main(String[] args) {int a 5, b 3;System.out.println(a a \tb b);a a ^ b;b a ^ b;a a ^ b;System.out.println(a a \tb b); }输出结果 2、判断一个正数的奇偶性 x 1 0 则为偶数否则为奇数。因为整数的二进制表示后最后一位的0和1就表示了该值的奇偶性1之后相当于除了最后一位其他位全清0了最后一位若是1则与的结果才为1说明是奇数最后一位为0则与的结果是0说明是偶数。 3、判断一个正数是不是2的幂次方 使用n(n-1) 0则为偶数否则为奇数。因为2的次方数除了高位的一个1外后面的数据全部都是0也就是说2的次方数的二进制形式里只有一个1其他全部是0减1后得到的二进制1所在位变成01后的其他位都会变成1所以与原二进制每一位都不相同使用后结果为0则可以证明为偶数 4、计算一个二进制数中1的个数 int a 15; int count 0; while (a ! 0) {if ((a 1) 1) {count;}a a 1; } System.out.println(count);输出结果 通过1结果为1说明最末一位是1则可通过不断1并判断1的个数是否加1直到这个数的值变为0为止。