标签:11111111 反码 00000000 补码 源码 内存 原码
首先要清楚:
1.一个数在电脑内存中是以 补码 的形式存在,知道这一点很重要
2.0、正数的原码、反码、补码不变,负数的原码、反码、补码有所不同
如-1(类型按照整型,即有32位):
原码:10000000 00000000 00000000 00000001
反码:1 1111111 11111111 11111111 11111110
补码:1 1111111 11111111 11111111 11111111
即:
反码:原码的符号位不变,其他位 按位取反
补码:在反码的基础上+1
0(类型按整型解释):
原码:00000000 00000000 00000000 00000000
反码:00000000 00000000 00000000 00000000
补码:00000000 00000000 00000000 00000000
原码、反码、补码均一样
大致意思解释完了,下面说一下用“~”时出现的难以理解的情况。
这里举一个例子,方便更好解释
int main()
{
int i = 0;
printf("%d",~i);
return 0;
}
最后得出的结果却是-1,出现这种情况的原因就是因为数在内存中是以补码形式存在的。
这里的i是整型,则有32位
0在内存中的存在形式: 00000000 00000000 00000000 00000000
~0在内存中的存在形式( ~ 是对0在内存中的存在形式进行取反的,且直接以取反后的序列存在内存中):11111111 11111111 11111111 11111111,这一串代表的是补码,要想得出结果需要翻译成原码,先翻译成反码(这里首位是1,为负数,在补码上-1就是反码):1 1111111 11111111 11111111 11111110,再找原码(符号位不变,其他位 按位取反):10000000 00000000 00000000 00000001,即结果为-1
在举个例子:
int main()
{
int i = -2;
printf("%d",~i);
return 0;
}
结果为1
-2:
原码:10000000 00000000 00000000 00000010
反码:11111111 11111111 11111111 11111101
补码:11111111 11111111 11111111 11111110
~(-2):
内存中的形式(即补码):00000000 00000000 00000000 00000001
首位是0,是正数,补码就是原码,则结果为1
标签:11111111,反码,00000000,补码,源码,内存,原码 来源: https://blog.csdn.net/qq_43657247/article/details/122649154
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。