大家好,欢迎来到IT知识分享网。
~:含义及用法举例
前言
本文在简单介绍原码反码补码的基础上,介绍“~”操作符的用法。
一、“~”是什么?
~:一种单目操作符,即对一个数的二进制按位取反。
二、原码、反码及补码
1.简介
一个整数的二进制表示有3种:原码、反码及补码。
最高位为符号位,0为正,1为负。
整数在内存中存储的是补码。
2.用法举例
①正整数
原码、反码、补码相同。
例如
1:
00000000 00000000 00000000 00000001(原码)
00000000 00000000 00000000 00000001(反码)
00000000 00000000 00000000 00000001(补码)
②负整数
原码 ——————————————–> 反码 ——————————————–> 补码
(符号位不变,其他位按位取反) (加一)
原码 <——————————————– 反码 <——————————————– 补码
(符号位不变,其他位按位取反) (减一)
例如
-1:
00000000 00000000 00000001(原码)
(反码)
(补码)
③零
这里要分为“正零”与“负零”讨论。
正零(可以参展①正整数的取法):
00000000 00000000 00000000 00000000(原码)
00000000 00000000 00000000 00000000(反码)
00000000 00000000 00000000 00000000(补码)
负零(可以参展②负整数的取法):
00000000 00000000 00000000(原码)
(反码)
00000000 00000000 00000000 00000000(补码)
三、“~”操作符
1.简介
按(二进制)位取反,即把所有二进制位(包括符号位)中数字,1变成0,0变成1。
2.用法举例
由于整数在内存中存储的是补码,故使用”~”(按位取反)时需要转化为补码进行运算。此时,得到的结果仍为补码,需要进一步转化为原码,得到最终输出值。
①正整数
例如
1:
00000000 00000000 00000000 00000001(补码)
~1:
(补码)
(反码)
00000000 00000000 00000010(原码)
即~1的输出结果为-2
代码如下:
#include <stdio.h> int main() { int a = 1; printf("%d\n", ~a); return 0; }
输出结果:-2
②负整数
例如
-1:
(补码)
~-1:
00000000 00000000 00000000 00000000(补码)
00000000 00000000 00000000 00000000(反码)
00000000 00000000 00000000 00000000(原码)
即~-1的输出结果为0
代码如下:
#include <stdio.h> int main() { int a = -1; printf("%d\n", ~a); return 0; }
输出结果:0
③零
由于正零与负零的补码相同,故不加以区分。
0:
00000000 00000000 00000000 00000000(补码)
~0:
(补码)
(反码)
00000000 00000000 00000001(原码)
即~0的输出结果为-1
代码如下:
#include <stdio.h> int main() { int a = 0; printf("%d\n", ~a); return 0; }
输出结果:-1
总结
以上就是关于“~”的详解,涉及原码、反码及补码仅简单介绍,相关内容可参考计算机组成原理。
希望可以帮助大家,如有错误,望指出,谢谢!
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/123270.html