热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C语言中按位取反(~)操作符

要理解C语言中按位取反操作符,首先要知道几个概念。原码、反码、补码的概念原码是一种计算机中对数字的二进制定点表示方法。其最高位为符号位,该位为0表示正

要理解C语言中按位取反操作符,首先要知道几个概念。



原码、反码、补码的概念


  1. 原码是一种计算机中对数字的二进制定点表示方法。其最高位为符号位,该位为0表示正数,该位为1表示负数。
  2. 反码简单来说就是除符号位不变外,其余各位按位取反,即0变1,1变0。
  3. 补码是反码+1。

特别注意:对于正数来说三者相同




按位取反的计算

输入数\rightarrow转换为二进制(该数的原码)\rightarrow转换为反码\rightarrow转换为补码\rightarrow按位取反(此时为按位取反后数的补码)\rightarrow转换为反码\rightarrow转换为原码打印

举个例子:

        当我们从键盘输入1时,1的原码是00000001,前面提到正数的原码、反码、补码相同,所以内存中存储的也是00000001。此时按位取反,变为11111110(此时为按位取反后数的补码)。注意原码和反码之间转换符号位是不变的,但是按位取反需要改变 。补码+(-1)转换为反码是11111101,再转换为原码是10000010。由进制转换可知为-2。

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

         若我们从键盘输入负数-1,-1的原码是10000001,因为负数的三码并不相同,所以要先进行转换,反码为11111110,补码为11111111。所以内存中存储的也是11111111。此时按位取反,变为00000000(此时为按位取反后数的补码)。由其符号位可知位正数,则该数原码也位00000000。进制转换得该数为+0,

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



总结

        按位取反涉及到一些进制转换的内容,实际上难度不大,重要的是了解其概念和计算原理。


推荐阅读
  • c语言二元插值,二维线性插值c语言
    c语言二元插值,二维线性插值c语言 ... [详细]
  • 本文将深入探讨C语言中的位操作符——按位与(&)、按位或(|)和按位异或(^),通过具体示例解释这些操作符如何在位级别上对数据进行操作。 ... [详细]
  • 实现系统调用
    实现系统调用一、实验环境​本次操作还是基于上次编译Linux0.11内核的实验环境进行操作。环境如下:二、实验目标​通过对上述实验原理的认识,相信 ... [详细]
  • 编译原理中的语法分析方法探讨
    本文探讨了在编译原理课程中遇到的复杂文法问题,特别是当使用SLR(1)文法时遇到的多重规约与移进冲突。文章讨论了可能的解决策略,包括递归下降解析、运算符优先级解析等,并提供了相关示例。 ... [详细]
  • 本文提供了一个使用C语言实现的顺序表区间元素删除功能的完整代码示例。该程序首先初始化一个顺序表,然后根据用户输入的数据进行插入操作,最后根据指定的区间范围删除相应的元素,并输出最终的顺序表。 ... [详细]
  • 深入浅出C语言指针
    指针是C语言中极其重要的数据类型,广泛应用于各种数据结构的表示、数组和字符串的操作以及内存地址的处理。本文将通过实例详细解析指针的基本概念及其应用。 ... [详细]
  • C语言中的指针详解
    1.什么是指针C语言中指针是一种数据类型,指针是存放数据的内存单元地址。计算机系统的内存拥有大量的存储单元,每个存储单元的大小为1字节, ... [详细]
  • 本文详细介绍了在单片机编程中常用的几个C库函数,包括printf、memset、memcpy、strcpy和atoi,并提供了具体的使用示例和注意事项。 ... [详细]
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
  • 本问题涉及在给定的无向图中寻找一个至少包含三个节点的环,该环上的节点不重复,并且环上所有边的长度之和最小。目标是找到并输出这个最小环的具体方案。 ... [详细]
  • 洛谷 P4009 汽车加油行驶问题 解析
    探讨了经典算法题目——汽车加油行驶问题,通过网络流和费用流的视角,深入解析了该问题的解决方案。本文将详细阐述如何利用最短路径算法解决这一问题,并提供详细的代码实现。 ... [详细]
  • 本文介绍如何手动实现一个字符串连接函数,该函数不依赖于C语言的标准字符串处理函数,如strcpy或strcat。函数原型为void concatenate(char *dest, char *src),其主要作用是将源字符串src追加到目标字符串dest的末尾。 ... [详细]
  • 本题要求计算一组正整数的最小公倍数(LCM)。输入包括多组测试数据,每组数据首先给出一个正整数n,随后是n个正整数。 ... [详细]
  • 本文详细介绍了如何在循环双链表的指定位置插入新元素的方法,包括必要的步骤和代码示例。 ... [详细]
  • 大华股份2013届校园招聘软件算法类试题D卷
    一、填空题(共17题,每题3分,总共51分)1.设有inta5,*b,**c,执行语句c&b,b&a后,**c的值为________答:5 ... [详细]
author-avatar
cathy522_788
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有