移位操作符

移位操作符操作运算对象是 位(bit)

它处理的数据类型只能是 整数类型(int)

先大概看一下图,了解它是怎么移动的,下面会解释规则

移位的时候关注两点,  1.移动的方向 2.空缺位置的填补形式.

"有符号"左移位操作符(<<)  将二进制数据左移(在低位补0).

int i = 12448;
System.out.println(Integer.toBinaryString(i<<5)); /*           将i的二进制表示  11000010100000 * 向左移动5位,在低位补0,结果是1100001010000000000 */
int i = -12448;
System.out.println(Integer.toBinaryString(i<<5)); /*      将i的二进制表示     11111111111111111100111101100000 *向左移动5位,在低位补0,结果是11111111111110011110110000000000 */
 

"有符号"右移位操作符(>>)  将二进制数据右移.(若符号原来是,就在高位插入0,为就在高位插入1)

int i = 12448;
System.out.println(Integer.toBinaryString(i>>5));/*二进制表示:11000010100000 *右移5位:    110000101    对比看出,当为正数时高位的0不显示 */
i = -12448; System.out.println(Integer.toBinaryString(i>>5));/*二进制表示:11111111111111111100111101100000 *右移5位:    11111111111111111111111001111011 */

相对有符号右移

"无符号"右移操作符(>>>) 就是说,无论数据是正负都在高位插入0.

i = 12448;
    System.out.println(Integer.toBinaryString(i>>>5));
/*二进制表示: 11000010100000
 *无符号右移5位 110000101 */

i = -12448;
    System.out.println(Integer.toBinaryString(i>>>5));
/*二进制表示: 11111111111111111100111101100000
 *无符号右移5位 111111111111111111001111011 */
 

"移位" 与 "等号" 组合使用 表示方法"<<=或>>=或>>>="

这样会执行两步操作,先移位,然后赋值.

时间: 2024-10-06 18:42:20

移位操作符的相关文章

Java移位操作符

1.问题背景    以下代码运行的结果为:    A.0       B.16    C.32      D.64 /** * */ package com.you.model; /** * @author Administrator * */ public class Right { /** * @param args */ public static void main(String[] args) { int number = 32; int subNum = number >> 32;

Java中的移位操作符

记住所有的移动位数,针对的都是补码来讲的,所以要先将十进制整数转换成补码后,然后再来进行移位操作 移位操作 还要注意类型的约束条件,例如int,移动范围是0-31位,所以看补码只能看最后五位,这才是有效数字:long移动范围是0-63,所以补码只能看最后六位. 右移操作符. 左位移操作符(<<):无论是有符号数还是无符号数,都低位补0. 有符号右移位操作符(>>):用符号扩展,为正高位补0,为负高位补1. 无符号小技巧:移位赋值   i >>= 10;   将i右移10

java移位操作符注意的问题

如果对char,byte或者short类型的数值进行移位处理,那么在移位进行之前,他们会被转为int类型, 并且所得到的结果也是一个int型. 若对long类型的数值进行处理所得到的结果也是long. 如果对byte或者short值进行这样的右移(>>>=)运算,得到的可能是不正确的结果,他们会被转成int类型, 然后被截断,赋值给原来的类型. public class Test { /** * @param args */ public static void main(String[

C# 操作符

C#的精彩世界还离不开其提供的丰富的操作符,按照操作数的个数,C#操作符可分为以下几类: 一元操作符 :++x,x++,--y,z-- 二元操作符:x+y,x-y,x*y 三元操作符:x=(x>a?x:a); 如果从操作符的作用来看,C#操作符可以分为赋值操作符,算术操作符,关系操作符,逻辑操作符,位操作符和其它操作符. 1.赋值操作符 赋值操作符除基本的赋值操作符“=”之外还包括以下的组合赋值操作符: +=    如:int x;  x+=5; 相当于:x=x+5; -=     如:int 

【java解惑】移位运算符规则

    如下代码: public class Example027 { public static void main(String[] args) { int i = 0; while (-1 << 32 != 0) { i++; } System.out.println(i); } }     结果说明:     将上述程序放到eclipse中,在输出行会有提示"Unreachable code".也就是while循环是死循环无法退出.     结果分析:     Ja

基础二:操作符

使用Java操作符 操作符接受一个或者多个参数,并生成一个新值. 操作符用于操作数,生成一个新值. 另外有些操作符可能会改变操作数自身的值,这被称为"副作用". 这些能改变操作数的操作符最普遍的作用就是产生副作用. 几乎所有的操作符都只能操作"基本类型". 例外的操作符是 = == 和 != . 这些操作符能操作所有的对象. 除此之外,String类支持 + 和 +=. 优先级 当一个表达式中存在多个操作符时,操作符的优先级决定了各个部分的计算顺序. 最简单的规则就

二、操作符

1.赋值 别名现象: 1)对象别名:对象a,b a = b; a的原引用丢失,被垃圾回收,a的新引用指向b的对象内容: 避免方式: a.name = b.name; 彼此对象独立: 2)方法别名: f(Letter y){y.c = '2';} class Letter{char c;} { Letter x = new Letter(); x.c = '1'; System.out.print(x.c); f(x); System.out.print(x.c); } 结果:1 2 2.算数操作

重载操作符与转换(上)

重载操作符的作用: 通过操作符重载,程序员能够针对类类型的操作数定义不同的操作符版本.程序用移位操作符(>> 和 <<)进行输入输出,用加号操作符(+)将两个 Sales_items 相加. 通过操作符重载,可以定义大多数操作符,使它们用于类类型对象.明智地使用操作符重载可以使类类型的使用像内置类型一样直观.标准库为容器类定义了几个重载操作符.这些容器类定义了下标操作符以访问数据元素,定义了 * 和 -> 对容器迭代器解引用.这些标准库的类型具有相同的操作符,使用它们就像使用

C++ 重载操作符与转换

<C++ Primer 4th>读书笔记 重载操作符是具有特殊名称的函数:保留字 operator 后接需定义的操作符号. Sales_item operator+(const Sales_item&, const Sales_item&); 声明了加号操作符,可用于将两个 Sales_item 对象“相加”并获得一个 Sales_item 对象的副本. 不能重载的操作符 :: .* . ?: 通过连接其他合法符号可以创建新的操作符.例如,定义一个 operator**以提供求