C语言二进制(原码,反码,补码)

1.存储,分类

整数的二进制有:原码,反码,补码。一般存储到内存中的是补码。

2.正负数原,反,补的关系

整数有正数和负数之分,

正数的原码=补码;

负数则不一样:

负数的反码=原码符号位不变,其他位按位取反

负数的补码=负数的反码+1;

3.符号位(判断正负)

整数的二进制通过首位数字来判断正负,即符号位,首位为1,则为负数;首位为0,则为正数。

4.二进制和十进制的关系

二进制转十进制:
正数:从右边向左边二进制数依次乘以2的次方数,如00101010转10进制:

(0 * 2的零次方) + (1* 2的一次方)+ (0 * 2 的二次方)+(1 * 2的三次方) +(0 * 2的四次方) +(1* 2的五次方) + (0 * 2的六次方) + (0 * 2的7次方) = 0 + 2 + 0 + 8 + 0 + 32 + 0 + 0 = 42

负数:先减1取反,在计算十进制

如1101011是负数,像转换成10进制,则减一取反为00010101,然后计算对应的十进制为21,所以最终结果是-21.

十进制转二进制

采用"除2取余,逆序排列"法:

1.首先用2整除一个十进制整数,得到一个商和余数

2.然后再用2去除得到的商,又会得到一个商和余数

3.重复操作,一直到商为小于1时为止

4.然后将得到的所有余数全部排列起来,再将它反过来(逆序排列),切记一定要反过来!

假设我们现在需要将42转为二进制,那我们怎么做呢,如下

    • 二进制的位数

在C语言中,对于移位,与,或,异或符号,需要写出完整的二进制,那么一个二进制到底有多少数呢?这一般都取决于这个数前面的类型,如果这个数是int型,int占4个字节,一个字节8个比特位,所以这个数的内存为32个比特位,即是由32 个数字组成二进制数字,一般前面补0.

猜你喜欢

转载自blog.csdn.net/m0_75115696/article/details/128851701