C语言(4) 原码、反码、补码与位运算

机器码与真值 

机器码:一个二进制数,首位为这个数的符号位  1为负符号  0为正符号

如:00000011 = 3

      10000011 =-3

真值: 

去除符号位后剩余二进制数计算出来的值,称为真值 



原码、反码、补码(计算中所有的二进制都使用补码表示

计算机使用补码的原因:使计算更精确 只使用原码或反码计算会出现-0的情况使计算机更加简便

计算机中没有减法 只有加法 如(-1)=(+-1) 所以有补码的出现


数据分为有符号数和无符号数,无符号数所有值为正数

所有无符号数(正数的原码、反码、补码一致)

有符号数:(正数) 原码==反码==补码

有符号数:(负数 )反码==原码(除符号位)所以数取反    补码=反码+1


原码

取值范围:-128到+127

11111111到01111111

反码

正数 : 原码=反码

负数:除符号位(首位)外  所有的位数值取反

补码

正数:原码=反码=补码

负数:在反码的基础上+1


如果在赋值  必须在对应的二制制前加 0b

如 int a1=0b11111101




位运算(针对二进制数的计算,计算后的值为补码)

& 同1为1 有0为0

| 同0为0 有1为1

~ 变1为0  变0为1

^相同为0 不同为1

<< 左移 各二进制位左移,高位丢弃,低位补0 向左移n位相当于 原数*(2的n次方)

值会变更大或更小

>> 右移 各二进制位右移,低位丢弃,高位补符号位 向右移n位相当于 原数/(2的n次方)   右移位不会改变一个数的正负值             值会变小


实用技能:

1、任何一个数与1进行(&)操作  可以判断一个数是奇偶数

1= 00000001

只需要知道这个数的最后一个数是0还是1 如果为1则为奇数 如果为0则为偶数

2、可以将任意数位设置为0

因为 &去处 有0为0 所以不管这个位上的值是多少 都会变为0


你可能感兴趣的:(C语言)