c语言中位运算用补码吗,C语言原码反码补码与位运算.

一、机器数和真值

机器数(computer number)是数字在计算机中的二进制表示形式

机器数有2个特点:一是符号数字化,二是其数的大小受机器字长的限制

比如:十进制中的+6,计算机字长为8位,转换成二进制就是00000110,如果是-6,就是10000110

这里的00000110和10000110便是机器数

因为第一位是符号位(正数该位为0,负数该位为1,0分+0和-0),所以:

①8位二进制数的取值范围就是:[1111 1111 , 0111 1111]

②机器数的形式值就不等于真正的数值。

为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。

比如:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1

二、原码,反码和补码的基础概念

对于一个数, 计算机要使用一定的编码方式进行存储。原码, 反码, 补码是机器存储一个具体数字的编码方式

[+1] = [00000001]原 = [00000001]反 = [00000001]补

[-1] = [10000001]原 = [11111110]反 = [11111111]补

1.原码

原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值

2.反码

正数的反码是其本身

负数的反码是在其原码的基础上, 符号位不变,其余各个位取反

3.补码

正数的补码就是其本身

你可能感兴趣的:(c语言中位运算用补码吗)