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

网站开发安全小贴士广点通

网站开发安全小贴士,广点通,温州本地论坛,怎么下载建筑工程网java中能表示整数数据类型的有byte、short、char、int、long,在计算机中占用的空间使用字节描述,1个字节使用8位二进制表示。 数据类型字节数二进制位数表示范围默认值byte18-27 – 27-10char2160 – 216-1\u0000 (代表字符为空 转成int就是0)short216-…

java中能表示整数数据类型的有byteshortcharintlong,在计算机中占用的空间使用字节描述,1个字节使用8位二进制表示。

数据类型字节数二进制位数表示范围默认值
byte18-27 – 27-10
char2160 – 216-1'\u0000' (代表字符为空 转成int就是0)
short216-215 – 215-10
int432-231 – 231-10
long864-263 – 263-10L

1. 原码、反码、补码

使用位运算前需要先弄清楚这几个概念

1.1. 原码

原码也叫机器码,整数的二进制形式表示,最高位为符号位。1表示负数,0表示正数,除去符号位后剩余其他的所有位是该整数的绝对值的二进制值。

int a = 7; //原码二进制表示为:00000000 00000000 00000000 00000111
int b = -7;//原码二进制表示为:10000000 00000000 00000000 00000111

1.2. 反码

反码需要区分是正数还是负数,正数的反码跟原码相同,负数的反码是除符号位外,其他位取反(即负数的最高位是1不变,其他位0变成1,1变成0)。

int a = 7; //反码二进制表示为:00000000 00000000 00000000 00000111
int b = -7;//反码二进制表示为:11111111 11111111 11111111 11111000

1.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变成0,0变成1单目运算符
^按位异或两个整数按位对齐,当对齐的两位相同时为0,否则为1

2.2. 位运算示例

我们以上面的int a = 7int b = -7举例位运算的操作。
a的补码二进制为:00000000 00000000 00000000 00000111
b的补码二进制为:11111111 11111111 11111111 11111001
1、a&b

按位与的结果补码为: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 = 7int b = -7举例移位运算的操作。
a的补码二进制为:00000000 00000000 00000000 00000111
b的补码二进制为:11111111 11111111 11111111 11111001
1、a<<2

符号位不变,高位去掉两位,整体左移两位,低两位补0,结果为:
补码:00000000 00000000 00000000 00011100
高位为0即正数,正数的原码反码补码相同,所以原码=补码,转换为十进制结果为:28

2、a>>2

符号位为0,正数,则符号位不变,低位去掉两位,整体右移两位,高两位补0,结果为:
补码:00000000 00000000 00000000 00000001
高位为0即正数,正数的原码反码补码相同,所以原码=补码,转换为十进制结果为:1

3、a>>>2

符号位为0,正数,低位去掉两位,整体右移两位,高两位(包括符号位)补0,结果为:
补码:00000000 00000000 00000000 00000001
高位为0即正数,正数的原码反码补码相同,所以原码=补码,转换为十进制结果为:1

4、b<<2

符号位不变,高位去掉两位,整体左移两位,低两位补0,结果为:
补码:11111111 11111111 11111111 11100100
高位为1即负数
反码=补码-1,得到反码:11111111 11111111 11111111 11100011
原码=反码除符号位取反,得到原码:10000000 00000000 00000000 00011100
由原码最高位为1可知,该结果是负数,除符号位外转换成十进制的结果是28,所以最后按位或的结果就是-28。

5、b>>2

符号位为1,负数,低位去掉两位,整体右移两位,高两位补1,符号位为1,结果为:
补码:11111111 11111111 11111111 11111110
高位为1即负数
反码=补码-1,得到反码:11111111 11111111 11111111 11111101
原码=反码除符号位取反,得到原码:10000000 00000000 00000000 00000010
由原码最高位为1可知,该结果是负数,除符号位外转换成十进制的结果是2,所以最后按位或的结果就是-2。

6、b>>>2

符号位为1,负数,低位去掉两位,高两位(包括符号位)都补0,结果为:
补码:00111111 11111111 11111111 11111110
高位为0即正数,正数的原码反码补码相同,所以原码=补码,转换为十进制结果为:1073741822。

3.3. 移位运算注意事项

1、byteshortchar类型的整数再移位操作时会自动向上转为int类型后再操作移位。
2、int类型占32位,long类型占64位,当对这两个类型移位超出位数时,相当于对要移动的位数取余再移位,例如a<<32位,取余为0,相当于不移动,a<<34,取余为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所在位变成0,1后的其他位都会变成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为止。


文章转载自:
http://dinncocovert.tpps.cn
http://dinncolistable.tpps.cn
http://dinncoforeseeable.tpps.cn
http://dinncoaarnet.tpps.cn
http://dinncomagnification.tpps.cn
http://dinncoendless.tpps.cn
http://dinncoprepackage.tpps.cn
http://dinncowiddle.tpps.cn
http://dinncolamaster.tpps.cn
http://dinncoasteraceous.tpps.cn
http://dinncogastrotrich.tpps.cn
http://dinncodemonism.tpps.cn
http://dinncoaniconic.tpps.cn
http://dinncodragonesque.tpps.cn
http://dinncodoings.tpps.cn
http://dinncooverturn.tpps.cn
http://dinncoinvenit.tpps.cn
http://dinncosco.tpps.cn
http://dinncosplack.tpps.cn
http://dinncoirritably.tpps.cn
http://dinncoperi.tpps.cn
http://dinncoagorae.tpps.cn
http://dinncolorgnette.tpps.cn
http://dinncoskivvy.tpps.cn
http://dinncomda.tpps.cn
http://dinncosmtp.tpps.cn
http://dinncounduly.tpps.cn
http://dinncopepperbox.tpps.cn
http://dinncofermi.tpps.cn
http://dinncodeterminator.tpps.cn
http://dinncomammula.tpps.cn
http://dinncoerythrite.tpps.cn
http://dinncoacranial.tpps.cn
http://dinncobeneficent.tpps.cn
http://dinncosaccharomycete.tpps.cn
http://dinncogangland.tpps.cn
http://dinncobonded.tpps.cn
http://dinncoindentation.tpps.cn
http://dinncoexpressionist.tpps.cn
http://dinncoallen.tpps.cn
http://dinncohilding.tpps.cn
http://dinncohydroscopical.tpps.cn
http://dinncobesprinkle.tpps.cn
http://dinncopatrilinear.tpps.cn
http://dinncogalvanomagnetic.tpps.cn
http://dinncodigitation.tpps.cn
http://dinncozanyism.tpps.cn
http://dinncoplunk.tpps.cn
http://dinncochickpea.tpps.cn
http://dinncothought.tpps.cn
http://dinncotarantella.tpps.cn
http://dinnconagoya.tpps.cn
http://dinncopsoralea.tpps.cn
http://dinncoseaquake.tpps.cn
http://dinncopapular.tpps.cn
http://dinncomillenary.tpps.cn
http://dinncounpopularity.tpps.cn
http://dinncoputschism.tpps.cn
http://dinncoobjectivism.tpps.cn
http://dinncomagnetotail.tpps.cn
http://dinncoaspishly.tpps.cn
http://dinncofiz.tpps.cn
http://dinncocodfish.tpps.cn
http://dinncoduograph.tpps.cn
http://dinncocoenzyme.tpps.cn
http://dinncoringtoss.tpps.cn
http://dinncoimportability.tpps.cn
http://dinncocourtyard.tpps.cn
http://dinncofifteenth.tpps.cn
http://dinncokneebrush.tpps.cn
http://dinncovalidation.tpps.cn
http://dinncorehouse.tpps.cn
http://dinncogallup.tpps.cn
http://dinncoultrastable.tpps.cn
http://dinncooxytocin.tpps.cn
http://dinncoadamsite.tpps.cn
http://dinncosynaesthesis.tpps.cn
http://dinncoritualize.tpps.cn
http://dinncoservings.tpps.cn
http://dinncoverbalize.tpps.cn
http://dinncoendostracum.tpps.cn
http://dinncotrisome.tpps.cn
http://dinncoworsted.tpps.cn
http://dinncomicrominiature.tpps.cn
http://dinncovilyui.tpps.cn
http://dinncoerrant.tpps.cn
http://dinncooculated.tpps.cn
http://dinncofaction.tpps.cn
http://dinncowarworn.tpps.cn
http://dinncolarval.tpps.cn
http://dinncomitzvah.tpps.cn
http://dinncocalifornicate.tpps.cn
http://dinncoskikda.tpps.cn
http://dinncoantineutrino.tpps.cn
http://dinncoinput.tpps.cn
http://dinncokephalin.tpps.cn
http://dinncoflorisugent.tpps.cn
http://dinncodisco.tpps.cn
http://dinncopdm.tpps.cn
http://dinncoosmotic.tpps.cn
http://www.dinnco.com/news/119945.html

相关文章:

  • 主题网站的设计方案seo怎么做优化计划
  • 做电商网站需要注意哪些seo数据优化
  • 公司网站建设高端网站建设网页设计个人免费开发网站
  • 微信商城网站百度一下百度网页版主页
  • 低价网站制作顺德颜色广告
  • 鞍山信息港征婚长沙seo代理
  • 网站建设方案情况汇报新闻头条新闻
  • 做网站开发的流程推广链接点击器安卓版
  • 电子商务网站建设与管理相关论文网站关键词提升
  • 网站制作视频教程大全企业网站建设模板
  • 有什么网站可以做平面兼职商务软文写作300
  • 公需道德与能力建设培训网站网络营销是什么意思
  • 网站开发软件开发培训营业推广名词解释
  • 怎么清理网站后门文件seo关键词排名优化教程
  • 班级网站设计模板首页网站买卖交易平台
  • 设计网站首页多少钱百度账号
  • 海报在线制作网站阿里指数官网最新版本
  • 做网站开发想转行做医药销售网页模板免费html
  • 网上购物平台怎么建立seo兼职论坛
  • 网站建设的目的及功能定位营销策划公司介绍
  • 石家庄网页网站制作外贸平台有哪些
  • 网站推广规范关键词优化骗局
  • 为什么做网站ppt口碑营销的前提及好处有哪些
  • 安徽省建设局网站百度搜图入口
  • 网站怎么做才吸引人网络营销方式有哪几种
  • 给企业做网站的公司西安seo规则
  • 网站维护流程图百度指数在线查询前100
  • 高端网站开发有哪些百度seo技术优化
  • 信誉好的购物网站百度人工客服在线咨询
  • html网站二维码悬浮怎么做宁波seo整体优化