栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言-原码 反码 补码

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言-原码 反码 补码

首先这里我们先使用 ~ 位取反 来带入正题

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

结果: -1

大家应该就比较好奇了 为什么是-1呢
位取反也就是 二进制位取反 首先会先把 0 转换成2进制 然后取反 就得到下面的结果
00000000 00000000 00000000 00000000
11111111 11111111 11111111 11111111
但是这也不等于-1呀 这里就要说到 整数在内存中存储的都是补码 正数的原码 补码 反码 都是一样的(规定)

那么我们把-1 转换成 二进制 来看一下 他的原码是多少 (原码就是直接转成二进制后的值)
10000000 00000000 00000000 00000001(原码)第一个1代表的是负值
11111111 11111111 11111111 11111110 (反码)就是相反的值 但是注意符号位不变 就是第一位
11111111 11111111 11111111 11111111(补码)正数的补码就是其本身 负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)

所以前面取得 0的位取反 得到的11111111 11111111 11111111 11111111 存储到内存中 就是一个补码
当我们输出的时候 就会转换成原码的方式 进行输出 10000000 00000000 00000000 00000001 也就是 -1

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/444119.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号