对于原码反码补码的详解有实例,和操作符 “~”

目录

1.对于原码反码补码的详解

2.操作符“~” 


1.对于原码反码补码的详解

对于他们三者直接的转化如下:

原码就是我们根据数字可以写出来的二进制数字

(1).原码就是我们根据数字可以写出来的二进制数字

(2).原码转换为反码:符号位不变,数值位分别“按位取反”

(3).反码转换为原码也是一样:符号位不变,数值位分别“按位取反”

(4).原码转换为补码:符号位不变,数值位按位取反,末位再加1

(5).补码转换为原码:符号位不变,数值位按位取反,末位再加1

注:在计算机中不管是正数还是负数存储的都是这个数的补码

但是负数原码反码补码各不相同,而正数的原码反码补码是相同的

任何对于数字的操作都是对数的补码进行操作
 

正数:

1的原码(00000000 00000000 00000000 00000001

5的原码(00000000 00000000 00000000 00000101

1和5在计算机中存储的是他们的补码,只是原码与补码长得一样而已

负数:

-1的原码(10000000 00000000 00000000 00000001)最高位为符号位1为负0为正

-1的反码(11111111 11111111 11111111 111111110

-1的补码(11111111 11111111 11111111 111111111

-1在计算机中存储的即是-1的补码


2.操作符“~” 

int main()
{ 
	int a = 0;
	printf("%d", ~a);
	return 0;
}

运行结果

注:操作符“~” 按(二进制)位取法 把所有二进制位中的数字,1变成0,0变成1


一个整数的二进制表示有三种:

负数的计算:

-1:

10000000000000000000000000000001(原码)(ps:最高位表示符号)

11111111111111111111111111111110(反码)(除了符号位,其他位与原码相反)

11111111111111111111111111111111(补码)(ps:反码+1)

正整数:

求原码即可,原码,反码,补码相同。


上面的代码中

例:整数a=0:

二进制:00000000000000000000000000000000

~a :11111111111111111111111111111111

因为整数在内存中存储的是补码,在内存中计算,所以

11111111111111111111111111111111

这是补码

%d显示的是原码,需要反推最后显示

10000000000000000000000000000001=-1


例:整数a=-1

10000000 00000000 00000000 00000001 -1的原码
11111111 11111111 11111111 11111110 -1的反码
11111111 11111111 11111111 11111111 -1的补码(计算机中存储的数据)
00000000 00000000 00000000 00000000 ~-1
00000000 00000000 00000000 00000000 这是一个正数所以原码补码反码都一样

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值