取反
如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。其余所有位将不会受到影响
参加运算的两个数据,按二进制位进行“与”运算。 另,负数按补码形式参加按位与运算。 (1)清零
父母在,人生尚有来路;父母不在,人生只剩归途。 你期望什么,你就会得到什么,你得到的不是你想要的,而是你期待的。 只要充满自信的期待,只要真的相信事情会顺利进行,事情一定会顺利进行;相反的说,如果你相信事情不断地受到阻力,这些阻力就会产生
获取某个数的第 i 位(判断某个数的第 i 位是0 还是 1?) 将第 i 位设置为1 将第 i 位设置为0(清0) 二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现
逻辑运算符的“按位取反”和“非”有什么区别? “按位取反”运算的符号是波浪符号“~”。运算规律是:针对某个数的“按位取反”,先将其展开成二进制的格式,然后每个位取反,所谓取反就是1的变成0,0的变成1。 “非”跟“按位取反”有点相似,但是区别也明显
(位运算的实质都是先将十进制数转化为二进制在进行位运算)。 java中使用补码来表示二进制数,在补码表示中,最高位是符号位:0-正数,1-负数,补码规则为:正数最高位是0,其余的各位表示其数值本身;负数是该数值的绝对值的补码安慰取反+1所得。 同理,5的二进制为: 在java中,int类型占32位,有正负之分,正数转化为二进制后,最高位是0.负数转化为二进制后最高位是1,所以,当右移时,高位的补位遵守“正数补0,负数补1”,而无符号右移的话,不论正负,均用0补齐
文章迁移自原博客,首发于2014年10月。 我们已经知道计算机中,所有数据最终都是使用二进制数表达。 我们也已经学会如何将一个10进制数如何转换为二进制数
与、或、非、异或,是编程所必须熟练掌握的。 与门:两者同真时为真(其符号为∩,因为其表现出乘法的特性: 1×1=1,1×0=0,0×0=0,又称其为逻辑乘,在非编程环境下可用×代替,单片机中用与门清零); 或门:两者同假时为假(其符号为∪,因为其表现出加法的特性: 1+1=2,1+0=1,0+0=0,又称其为逻辑和,在非编程环境下可用+代替,单片机中用或门置位); 非门:取反(其符号是在要取非的字母上划-,) 与或非在电路里面是很好表示的,例如: 与门:就是一个串联两个开关A,B的电路,只有A、B同时关上,电路才通; 或门:就是并联两个开关A,B的电路,只有A、B同时打开,电路才断; 非门:就是在工作电阻(例如:灯)处并联一个开关,当开关开时工作,而在开关关时反而停止工作。 了解了与或非,又他们引申出来的其他门都应该很简单,比如异或指令 (单片机中用异或门取反) 已知:如图,A=1101 1011 B=1001 0110 C=1011 0111 D=0101 1001
先简单说一些概念: 原码:从符号位开始表示,0是正数,1是负数 反码: 正数的原码反码补码都是一样的。 负数的反码是在其原码的基础上 符号位不变,其余各个位取反 比如-5转成二进制原码1101,在算出反码1010 补码: 首先将a和b转换成二进制补码每一位进行与运算,上下两个数都为1结果就是1,否则为0 首先将a和b转换成二进制补码每一位进行或运算,上下两个数只要有一个数为1结果就是1,否则为0 首先将a和b转换成二进制补码每一位进行异或运算,上下两个数相同为0,不同为1 #已知补码计算反码(上面说到了负数的补码=反码+1,所以补码-1=反码) #已知反码求原码(负数的反码=原码的符号位不变,其余各个位取反, #所以我们将数值位取反即可算出原码) #至此就算出了取反后的原码,我们在用8421法将二进制原码换算成10进制,最后的结果就是-16
均先转为二进制,然后对两个二进制数进行位运算。 位与&:两位均为1时得1,否则得0 位或|:任一位为1得1,否则得0 位异或^:双目运算符,位不同时得1,相同时得0。位取反^(某些语言中为~):单目运算符,0得1、1得0
