首页 > 其他分享 >整数取反和按位取反

整数取反和按位取反

时间:2023-10-19 22:12:41浏览次数:35  
标签:反码 res 补码 取反 整数 按位 原码

1.概念

在计算机中,-res 和 ~res 是两种完全不同的操作,它们有不同的含义和效果
按位取反“~”:按位取反1变0,0变1

1.1 ‘-res’

-res表示对res进行整数取反操作。如果res是一个有符号整数的二进制表示,如 1010,那么-res将变为 -1010。

1.2 ‘~res’

~res 表示对res进行按位取反操作
~res会反转res中的每一位,将1变为0,0变为1。
例如,如果res是一个二进制数,如 1010,那么~res将变为 0101。

1.3 区别

所以-5值就是-5
而~按位取反,5二进制00000101,取反11111010,代表-6,所以~5值-6

1. 按位取反的规律

所有正整数的按位取反是其本身+1的负数
所有负整数的按位取反是其本身+1的绝对值
零的按位取反是 -1

2. 解释按位取反的规律

计算机为方便运算,是使用补码来存取数值的。
我们平时理解的是原码,比如像3=0 0011,-5 = 1 0101
但是实际上在计算机中的存储呢?

例:
(注:前面四位作为符号位)
正数9:(正数原码,补码,反码均一样)
原码为: 0000 1001
反码为: 0000 1001
补码为: 0000 1001
按位取反为:  1111 0110(这里是负数补码,反码 = (补码 -1), 原码 = 反码取反)
解码为:  1111 (0110 -1)(反码) = 1111 1010(原码) = -10 = -(9 + 1)

再例如: -2(负数的反码是在其原码的基础上, 符号位不变,其余各个位取反/负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1))
求原码: 1111 0010 (前面4个1表示符号位)
求反码: 1111 1101 (符号位不变,其余各位求反)
求补码: 1111 1110 (符号位不变,末位+1)
取反为:  0000 0001 
解码为:  0000 0001  = 1 = -2 + 1(正数原码,补码,反码均一样)

所有正整数的按位取反是  -(本身+1)
所有负整数的按位取反是abs(本身+1)

标签:反码,res,补码,取反,整数,按位,原码
From: https://www.cnblogs.com/trmbh12/p/17775783.html

相关文章

  • 力扣12.整数转罗马数字
    罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符数值I1V5X10L50C100D500M1000例如,罗马数字2写做 II ,即为两个并列的1。12写做 XII ,即为 X + I......
  • 【C语言】输入一个正整数,判断其是否为素数
    1、素数又叫质数。素数,指的是“大于1的整数中,只能被1和这个数本身整除的数”。2、素数也可以被等价表述成:“在正整数范围内,大于1并且只有1和自身两个约数的数”。#include<stdio.h>intmain(){ inti,m; printf("输入一个正整数:"); scanf("%d",&m); for(i=2;i<=m/......
  • 请不要再用整数ID值插入数据库
    数据库设计在现代应用程序中不仅要满足数据完整性和性能需求,还需要考虑安全性。本文将讨论如何同时提高数据库的安全性和数据检索性能,以满足现代应用的需求。数据安全性的挑战整数ID的安全性问题在传统数据库设计中,使用整数ID作为主键可能存在安全风险,因为它们很容易被猜测......
  • 无涯教程-NumPy - 按位运算符
    以下是NumPy包中可用的按位运算功能。Sr.No.描述1bitwise_and计算数组元素的按位与运算2bitwise_or计算数组元素的按位或运算3invert按位计算NOT4left_shift将二进制表示形式的位向左移动5right_shift将二进制表示形式的位向右移参考链接https://ww......
  • 计算整数列表中的中位数
    在计算机科学和数据分析领域,计算整数列表中的中位数是一项非常重要的任务。中位数是一组数据中排在中间位置的数值,对于理解数据分布和预测数据趋势具有重要意义。本文将介绍如何使用Python语言来计算整数列表中的中位数,并详细阐述相关实现过程和优缺点。一、解决问题的方法要计算整......
  • 13. 罗马数字转整数
    1.题目介绍罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符数值I1V5X10L50C100D500M1000例如,罗马数字2写做II,即为两个并列的1。12写做XII,即为X+I......
  • #yyds干货盘点# LeetCode程序员面试金典:整数转换英文表示
    题目:将非负整数 num 转换为其对应的英文表示。 示例1:输入:num=123输出:"OneHundredTwentyThree"示例2:输入:num=12345输出:"TwelveThousandThreeHundredFortyFive"示例3:输入:num=1234567输出:"OneMillionTwoHundredThirtyFourThousandFiveHundredSixtySe......
  • 计算小于或等于n的非负整数区间包含的1的数量
    在许多编程面试中,我们可能会碰到各种不同的问题,要求我们分析给定的数据或条件,以得出特定的结果。其中一个常见的问题是,给定一个整数n,要求计算出小于或等于n的非负整数区间包含的1的数量。这个问题可以通过直接编程解决,也可以通过更复杂的数学方法解决。在本文中,我将介绍一种简单的P......
  • C++大整数类
    用法把头文件和源代码文件放在同一目录下,然后#include"INT"即可使用。你能对int类的变量进行a=2,a+=3,a%8,a--等等操作,那你就也能对INT进行。INT基于vector,可以实现存储任意大的整数,且利用动态内存机制不会多浪费一点空间类声明classINT{ public: INT(); template<class......
  • c语言代码练习(无符号整数)29
    #define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>#include<windows.h>intmain(){unsignedinti;for(i=9;i>=0;i--){printf("%u\n",i);Sleep(100);}return0;}死循环,因为无符号整数,没有负数......