C或C++取反操作(附代码及详解)

C或C++取反操作(附代码及详解)


取反:~ 取反

按位取反,原来的位是1,就变为0,如果是0,就变为1
原码、反码和补码
原码:最高位是符号位,0表示正数,1表示负数
反码:最高为是符号位,0表示正数,1表示负数,正数的反码是它本身,负数的反码是除了符号位以外其余各位取反反码:最高为是符号位,0表示正数,1表示负数,正数的反码是它本身,负数的反码是除了符号位以外其余各位取反@TOC
补码:最高为是符号位,0表示正数,1表示负数,正数的补码是它本身,负数的补码是反码+1
为什么需要补码操作:
例如:1 + (-1) = 0
如果使用原码来直接计算 0001 + 1001 = 1010,计算的结果是-2,这样的结果是错误的
如果使用补码来计算 0001 + 1111 = 1 0000,最高位的1直接溢出,所以结果是0000,就是0
原码和补码的转化方式
补码转原码:正数不变,负数除了符号位以外,其余各位取反+1
原码转补码:正数不变,负数除了符号位以外,其余各位取反+1
为什么10取反之后会变为-11
因为计算机中存储方式都是按照补码的形式存储的,正数的补码是它本身,负数补码等于反码+1
所以10对应的二进制是0000 1010,取反之后1111 0101,最高位是1,代表符号位,说明这个数是负数,这是补码,如果要拿到十进制的结果,必须要将其转化为原码才能看到,原码是补码取反+1得来的,所以原码除了符号位以外,各位取反+1获取:1000 1010 + 1 = 1000 1011,这个值就是-11。
C语言表示

#include<stdio.h>// 引入标准输入输出库,用于使用printf函数打印结果intmain(){// 1. 无符号字符型变量的按位取反unsignedchar ch =0;// 定义无符号字符型变量ch,初始值为0// unsigned char是8位无符号整数(范围0~255),没有符号位,所有位都用于表示数值// 此时ch的8位二进制为:0000 0000(每一位都是0) ch =~ch;// 对ch进行按位取反操作(~是按位取反运算符)// 按位取反规则:二进制的每一位0变1,1变0// 原来的二进制:0000 0000// 取反后变为:1111 1111(8位全是1)// 对于无符号数,11111111转换为十进制是255(计算:128+64+32+16+8+4+2+1=255)printf("%d\n", ch);// 打印ch的值,输出255// 2. 有符号整型变量的按位取反int number =10;// 定义有符号整型变量number,初始值为10// int是32位有符号整数(部分系统是64位,这里以32位为例)// 有符号数的最高位是符号位(0表示正数,1表示负数),其余位表示数值// 10的32位二进制(原码):00000000 00000000 00000000 00001010 number =~number;// 对number进行按位取反操作// 按位取反后,每一位0变1,1变0,结果为:// 11111111 11111111 11111111 11110101// 此时最高位是1,表示这是一个负数// 计算机中负数用补码表示,要得到十进制值需转换为原码:// 补码转原码步骤:先取反(符号位不变),再加1// ① 补码:11111111 11111111 11111111 11110101// ② 取反(符号位不变):10000000 00000000 00000000 00001010// ③ 加1:10000000 00000000 00000000 00001011(即-11)printf("%d\n", number);// 打印number的值,输出-11return0;}

C++

#include<iostream>#include<bitset>// 用于将整数转换为二进制字符串usingnamespace std;intmain(){// 1. 无符号整数的按位取反(unsigned int)unsignedint u_num =5;// 无符号数5unsignedint u_result =~u_num;// 按位取反操作 cout <<"=== 无符号整数的按位取反 ==="<< endl;// 用bitset<8>显示8位二进制(简化观察,实际是32/64位) cout << u_num <<" 的二进制:"<< bitset<8>(u_num)<< endl;// 00000101 cout <<"取反后二进制:"<< bitset<8>(u_result)<< endl;// 11111010 cout <<"取反后的值:"<< u_result << endl << endl;// 250(8位情况下)// 2. 有符号整数的按位取反(int)int s_num =5;// 有符号数5int s_result =~s_num;// 按位取反操作 cout <<"=== 有符号整数的按位取反 ==="<< endl; cout << s_num <<" 的二进制:"<< bitset<8>(s_num)<< endl;// 00000101(正数原码) cout <<"取反后二进制:"<< bitset<8>(s_result)<< endl;// 11111010(负数补码) cout <<"取反后的值:"<< s_result << endl;// -6(补码转十进制的结果)// 3. 特殊案例:对0进行取反int zero =0; cout <<"\n=== 对0进行按位取反 ==="<< endl; cout << zero <<" 的二进制:"<< bitset<8>(zero)<< endl;// 00000000 cout <<"取反后二进制:"<< bitset<8>(~zero)<< endl;// 11111111 cout <<"取反后的值(有符号):"<<~zero << endl;// -1(32位下是-1) cout <<"取反后的值(无符号):"<<(unsignedint)~zero << endl;// 4294967295(32位无符号最大值)return0;}

Read more

【CS创世SD NAND征文】为无人机打造可靠数据仓:工业级存储芯片CSNP32GCR01-AOW在飞控系统中的应用实践

【CS创世SD NAND征文】为无人机打造可靠数据仓:工业级存储芯片CSNP32GCR01-AOW在飞控系统中的应用实践

一、引言:无人机时代的数据存储挑战 在无人机(UAV)技术飞速发展的今天,其应用范畴早已突破消费级航拍的界限,深度渗透至测绘勘察、基础设施巡检、精准农业、安防监控乃至国防军事等工业级领域。每一次精准的自动巡航、每一帧高清图像的实时图传、每一条飞行轨迹的忠实记录,都离不开飞控系统这颗"大脑"的精密运算。然而,大脑的决策依赖于记忆与学习,而承担这一"记忆"任务的存储单元,其可靠性直接决定了飞行任务的成败与数据的价值。一次意外的数据丢失或存储故障,不仅可能导致珍贵的测绘数据付诸东流,造成重大的经济损失,甚至可能引发严重的飞行安全事故。因此,为无人机飞控系统选择一款高性能、高可靠的存储芯片,已成为行业设计中不可或缺的关键一环。 本文将围绕基于全志MR100主控平台与CS创世SD NAND(具体型号:CSNP32GCR01-AOW)构建的新一代无人机飞控存储方案,深入探讨工业级存储芯片如何为高端无人机赋予稳定、可靠的"数据生命线",助力无人机技术在各个领域发挥更大的价值。 二、应用产品介绍:无人机飞控系统——空中机器人的智能核心

By Ne0inhk
使用Flutter导航组件TabBar、AppBar等为鸿蒙应用程序构建完整的应用导航体系

使用Flutter导航组件TabBar、AppBar等为鸿蒙应用程序构建完整的应用导航体系

📖 前言 导航是移动应用中最重要的功能之一,它帮助用户在不同页面和功能之间切换。Flutter 提供了丰富的导航组件,包括 AppBar、BottomNavigationBar、TabBar、Drawer、Scaffold 等,能够构建完整的应用导航体系。 🎯 导航组件概览 Flutter 提供了以下导航组件: 组件名功能说明适用场景Scaffold页面骨架应用页面基础结构AppBar顶部导航栏页面标题、操作按钮BottomNavigationBar底部导航栏主要功能切换TabBar标签栏页面内内容分类TabBarView标签内容区标签对应的内容Drawer侧边抽屉导航菜单、设置BackButton返回按钮页面返回CloseButton关闭按钮关闭对话框 🏗️ Scaffold 组件 Scaffold 是 Material Design 应用的基础结构,提供了页面骨架。 基础用法 Scaffold( appBar:AppBar( title:Text('标题'),), body:Center( child:Text('页面内容'),),) 完整结构

By Ne0inhk
Flutter 三方库 whatsapp_bot_flutter 自动化社交矩阵鸿蒙多维协同适配指引:横向打通设备生态通信拦截管道、打造多模态实体机器人事件分发-适配鸿蒙 HarmonyOS ohos

Flutter 三方库 whatsapp_bot_flutter 自动化社交矩阵鸿蒙多维协同适配指引:横向打通设备生态通信拦截管道、打造多模态实体机器人事件分发-适配鸿蒙 HarmonyOS ohos

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 whatsapp_bot_flutter 自动化社交矩阵鸿蒙多维协同适配指引:横向打通设备生态通信拦截管道、打造多模态实体机器人事件分发极限制化与消息群发堡垒 前言 在 OpenHarmony 的企业级服务助理、自动化通知分发系统或者是个人智能机器人应用中,如何打通全球主流的即时通讯链路是开发者必须跨越的门槛。whatsapp_bot_flutter 库为 Flutter 开发者提供了一套基于协议或 Web 端桥接的自动化社交机器人方案。本文将带大家在鸿蒙端实战适配该库,探索社交自动化的无限可能。 一、原直线性 / 概念介绍 1.1 基础原理/概念介绍 whatsapp_bot_flutter 的核心逻辑是基于 基于流的会话状态机与加密协议握手 (Encryption Protocol Handshake)。它模拟官方客户端的连接逻辑,通过与指定网关建立受保护的 WebSocket 链路,并实时监听业务事件流(消息、

By Ne0inhk
Formality:原语(primitive)的概念

Formality:原语(primitive)的概念

相关阅读 Formalityhttps://blog.ZEEKLOG.net/weixin_45791458/category_12841971.html?spm=1001.2014.3001.5482         原语(primitive)一般指的是语言内置的基本构件,它们代表了基本的逻辑门和构件,通常用于建模电路的基本功能,例如Verilog中的门级建模会使用and、or等关键词表示单元门。Formality也存在原语的概念,这一般出现在对门级网表进行建模时,本文将对此进行详细解释。         假设以例1所示的RTL代码作为参考设计(可以看出添加了// synopsys sync_set_reset综合指令让Design Compiler将其实现为带同步复位端的D触发器),例2所示的综合后网表作为实现设计,其中data_out_reg原语是一个带同步复位端的D触发器(FDS2)。 // 例1 module ref( input clk, input reset, input data_in, output reg data_

By Ne0inhk