java移位关于java的左移运算符的例子,谁能提供一下
java移位 时间:2021-06-17 阅读:(
)
java循环矩阵移位
import?java.util.Scanner;
public?class?FiveJuZheng?{
public?static?void?main(String[]?args)?{
int[][]?arr?=?{?{?1,?2,?3,?4,?5?},?{?6,?7,?8,?9,?10?},
{?11,?12,?13,?14,?15?},?{?16,?17,?18,?19,?20?},
{?21,?22,?23,?24,?25?}?};
int?x?=?0?,?y?=?0;
boolean?flag?=?true;
Scanner?sc?=?new?Scanner(System.in);
do?{
System.out.println("请输入两个位移量(注:不能超过5或者-5,用空格分开)");
String?readline?=?sc.nextLine();
String[]?numbers?=?readline.split("?");
if(numbers.length?2){
System.out.println("警告!输入有误:少于两个数!");
continue;
}
x?=?Integer.parseInt(numbers[0]);
y?=?Integer.parseInt(numbers[1]);
if(numbers.length?==?2?&&?x?5?&&?x?>?-5?&&?y?5?&&?y?>?-5){
flag?=?false;
}else{
System.out.println("警告!输入有误:数值须在(-5?,5)内,不包括-5和5!");
}
}?while?(flag);
arr?=?xidc(arr,?x);
arr?=?yidc(arr,?y);
for?(int?i?=?0;?i?5;?i++)?{
for?(int?j?=?0;?j?5;?j++)?{
System.out.print(arr[i][j]?+?" ");
}
System.out.println();
}
}
/**
?*?处理数组下沉
?*?@param?arr?源数组
?*?@param?x?下沉行数
?*?@return?下沉后的数组
?*/
private?static?int[][]?xidc(int[][]?arr,?int?x)?{
int[]?temp?=?new?int[5];
if?(x?0)?{
x?=?5?+?x;?//输入为负时换成对应的正数行??上浮2行?等于?下沉3行
}
for?(int?k?=?0;?k??0;?i--)?{
int?line?=?i?-?1;
temp?=?arr[i];
arr[i]?=?arr[line];
arr[line]?=?temp;
}
}
return?arr;
}
/**
?*?处理数组向右移动
?*?@param?arr?源数组
?*?@param?y?右移列数
?*?@return?移位后数组
?*/
private?static?int[][]?yidc(int[][]?arr,?int?y)?{
int[]?temp?=?new?int[5];
if?(y?0)?{
y?=?5?+?y;??//输入为负时换成对应的正数行??左移2列?等于?右移3列
}
for?(int?k?=?0;?k??0;?i--)?{
int?line?=?i?-?1;
for?(int?j?=?0;?j?5;?j++)?{
temp[j]?=?arr[j][i];
arr[j][i]?=?arr[j][line];
arr[j][line]?=?temp[j];
}
}
}
return?arr;
}
}简测可以达到效果。
java位移运算
java中整数int的位数是32位,如果是要这个数的32位从左算起的第4位到第7位为0,则只需要将该数按位与上0xE1FFFFFF,即110&0xE1FFFFFF。
不过这样与了之后,110的值不变,因为110的二进制表示是32位表示的,所以从左算起的第4个到第七个位都是0。
如果是从右开始的第4位到第7位就是按位与上0xFFFFFF87,即110&0xFFFFFF87.java数组整体移位问题?如将{1,3,1,2,3,2,3,2}移成{1,1,2,2,2,3,3,3} 如何高效实现。
就是把里面所有的3移动到最后,其他的顺序前移?没法可选的时候我会用遍历,循环来做。
public class ClassB {
public static void main(String... arg){
int [] a = {1,3,2,4,65,21,3,546,3,2,1};
for(int i=0;i<a.length;i++){
if(a[i]==3){
int n =i;
for(int j=n+1;j<a.length;j++){
a[n]=a[j];
n++;
}
a[a.length-1]=3;
}
}
for(int i =0;i<a.length;i++){
System.out.print(a[i]+" ");
}
}
}
方法笨一点,用还是可以用的
1 2 4 65 21 546 2 1 3 3 3Java 移位>>运算符,看代码。
-4的二进制表示为1111 1111 1111 1011
i>>3 右移3位,移出的不管,左端补1 变为1111 1111 1111 1111 这是-1的二进制表示,所以结果为-1.
i>>5 同理。
具体原理:
先来说一下怎么得出负数的二进制。
原码,反码,补码,这三个概念搞清。
1、原码:一个正数,按照绝对值大小转换成的二进制数;一个负数按照绝对值大小转换成的二进制数,然后最高位补1,称为原码。
比如 00000000 00000000 00000000 00000101 是 5的 原码。
10000000 00000000 00000000 00000101 是 -5的 原码。
备注:
比如byte类型,用2^8来表示无符号整数的话,是0 - 255了;如果有符号, 最高位表示符号,0为正,1为负,那么,正常的理解就是 -127 至 +127 了.这就是原码了,值得一提的是,原码的弱点,有2个0,即+0和-0(10000000和00000000);还有就是,进行异号相加或同号相减时,比较笨蛋,先要判断2个数的绝对值大小,然后进行加减操作,最后运算结果的符号还要与大的符号相同;于是,反码产生了。
2、反码:正数的反码与原码相同,负数的反码为对该数的原码除符号位外各位取反[每一位取反(除符号位)]。
取反操作指:原为1,得0;原为0,得1。
(1变0; 0变1)
比如:正数00000000 00000000 00000000 00000101 的反码还是 00000000 00000000 00000000 00000101
负数10000000 00000000 00000000 00000101 的反码则是 11111111 11111111 11111111 11111010。
反码是相互的,所以也可称:10000000 00000000 00000000 00000101 和 11111111 11111111 11111111 11111010互为反码。
备注:还是有+0和-0,没过多久,反码就成为了过滤产物,也就是,后来补码出现了。
3、补码:正数的补码与原码相同,负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1.
比如:10000000 00000000 00000000 00000101 的补码是:11111111 11111111 11111111 11111010。
那么,补码为:
11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011
备注:1、从补码求原码的方法跟原码求补码是一样的 ,也可以通过完全逆运算来做,先减一,再取反。
2、补码却规定0没有正负之分
所以,-5 在计算机中表达为:11111111 11111111 11111111 11111011。
转换为十六进制:0xFFFFFFFB。
搞懂二进制表示后,再来说一下左移右移运算符。
左移运算是将一个二进制位的操作数按指定移动的位数向左移位,移出位被丢弃,右边的空位一律补0。
右移运算是将一个二进制位的操作数按指定移动的位数向右移动,移出位被丢弃,左边移出的空位或者一律补0,或者补符号位,这由不同的机器而定。
在使用补码作为机器数的机器中,正数的符号位为0,负数的符号位为1。
(均由机器来定)
So,为什么得到-1知道了吧~~~关于java的左移运算符的例子,谁能提供一下
value << num
num 指定要移位值value 移动的位数
class ByteShift {
public static void main(String args[]) {
byte a = 64, b;
int i;
i = a << 2;
b = (byte) (a << 2);
System.out.println("Original value of a: " + a);
System.out.println("i and b: " + i + " " + b);
}
}
2022年春节假期陆续结束,根据惯例在春节之后各大云服务商会继续开始一年的促销活动。今年二月中旬会开启新春采购季的活动,我们已经看到腾讯云商家在春节期间已经有预告活动。当时已经看到有抢先优惠促销活动,目前我们企业和个人可以领取腾讯云代金券满减活动,以及企业用户可以领取域名优惠低至.COM域名1元。 直达链接 - 腾讯云新春采购活动抢先看活动时间:2022年1月20日至2022年2月15日我们可以在...
陆零网络是正规的IDC公司,我们采用优质硬件和网络,为客户提供高速、稳定的云计算服务。公司拥有一流的技术团队,提供7*24小时1对1售后服务,让您无后顾之忧。我们目前提供高防空间、云服务器、物理服务器,高防IP等众多产品,为您提供轻松上云、安全防护 为核心数据库、关键应用系统、高性能计算业务提供云端专用的高性能、安全隔离的物理集群。分钟级交付周期助你的企业获得实时的业务响应能力,助力核心业务飞速成...
#年终感恩活动#华纳云海外物理机688元/月,续费同价,50M CN2 GIA/100M国际大带宽可选,超800G 防御,不限流华纳云成立于2015年,隶属于香港联合通讯国际有限公司。拥有香港政府颁发的商业登记证明,作为APNIC 和 ARIN 会员单位,现有香港、美国等多个地区数据中心资源,百G丰富带宽接入,坚持为海内外用户提供自研顶级硬件防火墙服务,支持T B级超大防护带宽,单IP防护最大可达...
java移位为你推荐
win7中文语言包windows7怎样汉化短信营销方案家装短信营销如何进行才有效?代发邮件邮件代发会不会有短信代发那么好的市场效益呢?pat是什么格式如何把JPG图片变为PAT格式图片?手机软件开发工具如何自己开发一个app软件webservice框架什么是webservice,什么情况下使用,如何使用在线直播系统网络视频直播系统的简介腾讯合作伙伴大会从微信同程旅行买的机票怎么打印电子发票?医院排队系统怎么将排队系统的信息显示在led上防火墙技术应用在网络支付流程中,防火墙技术与数据加密技术应用则重点有什么不同?
免费申请网站域名 budgetvm 星星海 mediafire 免费个人网站申请 京东商城0元抢购 域名转向 100mbps 申请网页 国外视频网站有哪些 环聊 空间购买 网页提速 浙江服务器 cdn网站加速 ssl加速 杭州电信宽带 mteam 密钥索引 windowsserver2012 更多