i&1、负数二进制

if(i&1==1) 表示 如果是 奇数 则。。。
i&1 -- 按位与运算,取 2进制整数 i 的最低位,
如果最低位是1 则得1,
如果最低位是0 则得0。
奇数 i 的最低位 是1,
偶数i 的最低位 是0。

负数二进制表示:

计算机对有符号数(包括浮点数)的表示有三种方法:原码、反码和补码, 补码=反码+1。在 二进制里,是用 0 和1 来表示正负的,最高位为符号位,最高位为 1 代表负数,最高位为 0 代表正数。

以负数-5为例:

1.先将-5的绝对值转换成二进制,即为0000 0101;

2.然后求该二进制的反码,即为 1111 1010;

3.最后将反码加1,即为:1111 1011

 
以java为例:
int x1=8;
int x2=-8;
int y1=7;
int y2=-7;
注意:int的宽度为32位,最高位为符号位,机内负数以补码表示,上面的4变量x1,x2,y1,y2的机内码分别是(二进制形式)
x1:0000 0000 0000 0000 0000 0000 0000 1000
x2:1111 1111 1111 1111 1111 1111 1111 1000
y1:0000 0000 0000 0000 0000 0000 0000 0111
y2:1111 1111 1111 1111 1111 1111 1111 1001

x1>>>1得:
0000 0000 0000 0000 0000 0000 0000 0100 十进制为4
x2>>1得:
1111 1111 1111 1111 1111 1111 1111 1100 十进制为-4
y1>>1得:
0000 0000 0000 0000 0000 0000 0000 0011 十进制为3
y2>>>1得:
0111 1111 1111 1111 1111 1111 1111 1100 十进制为2147483644
 

交换两个变量的值 不要新的变量的方法:
a=a+b;
b=a-b;
a=a-b‘

或者
a=a^b;
b=a^b;
a=a^b;

时间: 2024-09-30 15:15:07

i&1、负数二进制的相关文章

Java语法基础---进制---负数二进制

八进制:用0开头表示. 十六进制:用0x开头表示. 负数的二进制表现形式    对应的正数二进制,取反加1,负数二进制最高位为1,正数二进制最高位为0

数据类型的转化(注意细节)+负数二进制算法

数据类型的转换要注意的细节: 凡是byte.short.char数据类型数据在运算的时候都会自动转换成int类型的数据再运算 多个数据类型的数据在运算的时候取决于大的数据类型 例子: byte a1 = 1; byte a2 = 2; byte a3 = (byte)(a1+a2); System.out.println(a3); //输出3 System.out.println('a' + 1 ); //输出98 一个整数没有加上任何标识的时候,默认是int类型的数据. 负数二进制算法 负数在

负数二进制在32位int表示

在计算机中,负数以其正值的补码形式表达 什么叫补码呢?这得从原码,反码说起. 原码:一个整数,按照绝对值大小转换成的二进制数,称为原码. 比如 00000000 00000000 00000000 00000101 是 5的 原码. 反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码. 取反操作指:原为1,得0:原为0,得1.(1变0; 0变1) 比如:将00000000 00000000 00000000 00000101每一位取反,得11111111 11111111 11111

记一次负数的二进制

这是去年的一个填空题,当然,只要知道换算二进制就完全没问题的~ 1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 5 void to2(int x) 6 { 7 int flage = 0; 8 flage = (x>0)?1:-1; 9 if(x == 0) flage = 0; 10 switch(flage) 11 { 12 case 0:cout<<" ";

关于c语言中负数位移位操作的漫谈

最近有个朋友在程序中使用了对16进制数做负数移位(编译器是gcc),本人最次产生好奇,所以研究了一些. 对一个数做负数位移位的操作是不规范的,但是是可行的. 具体例子: char tmp = 0x10; tmp = tmp << -1; 大家猜猜结果是什么,有人猜是tmp左移-1位不就是右移1位吗?结果是0x01? 很遗憾,电脑和人脑是不一样的.结果是0 为什么呢?为了找出原因,本人进行了一些小小的测试,并做出了有依据的结果. 由于知道+0和-0的区别,所以,我首先将tmp <<

一个整数的二进制表示中有多少个1

题目: 一个整数存储在内存中,输出它的二进制表示中1的个数 思路: 要判断这个整数的二进制表示中1的个数,联想到这是[位运算]的题目. 最先想到巧妙利用[1]这个数,[1]只有最右一位是1,其他位均为0: 所以,接下来应该想到,用“1”和这个整数做[与运算],首先可以判断最右边一位是不是1,以此类推,该整数每右移一位,和1做与运算,直到该整数变为0.至此,问题思路已有,但是考虑非正常数字,比如[负数],该方法就不适用,因为负数二进制需要保持最高位一直为1,最后会陷入死循环(OXffffffff)

二进制处理中的一些技巧

在二进制和十进制的处理中,有时候一些小技巧是很有用的. 1.把十进制数转换成二进制数 (1)在MATLAB中有一个函数dec2bin,可以把正整数转换为2进制 (2)对于负数有这样一个结论:N位二进制负数X的补码对应的无符号数为2N +X 例:有符号原码:1001  十进制为:-1       反码: 1110 补码:1111   无符号数为:15 15 = 24  + (-1); 这样就可以快速的知道用4位二进制表示的-5的补码的无符号数为16-5=11即1011 2.把负数二进制补码转换成十

[javaSE] 进制转换(二进制十进制十六进制八进制)

十进制转二进制,除2运算 十进制6转二进制是 110  (注意从右往左写,使用算式从下往上写) 二进制转十进制,乘2过程 二进制110转十进制  0*2的0次方+1*2的1次方+1*2的2次方=6 对应关系 0 1 0 1 0 1 32 16 8 4 2 1 把1对应的位置的数加起来就可以了,所以是21 一个字节 1 1 1 1 1 1 1 1 最大值是255 加法运算5 + 4=9,转成二进制进行运算 1 0 1 +1 0 0 1 0 0 1 其他进制转换 八进制可以看作是三个二进制位代表一位

获取码值和进制转换系统(包括正负数、小数)

获取码值和进制转换 程序由来: 本人发现计算机中的计算器木有将十进制小数转二进制的功能,后来发现一些网站将十进制负数转二进制只是求出整数的二进制,然后前面加"-",这种表示不是真正的负数二进制.于是爱较真儿的我写了一个可以转十进制小数.负数.负数加小数为二进制的系统,供大家学习参考.介于理解代码,代码中运用到了纯拼音.虽然是拼音,但符合代码编写格式.介于个人知识有限,代码如有需要修改和改进的地方,敬请大家评教指正,共同学习. 实现功能: 获取字符的码值,包括中文. 进制转换包括:十进制