首页 > 其他分享 >二进制和位运算

二进制和位运算

时间:2024-04-06 11:55:39浏览次数:19  
标签:运算 二进制 取反 负数 int 正数 相反数

1. 无符号:

int32位可以表示0~2^32-1位数。

2. 有符号:

负数占1/2,正数和0占1/2
首位为0表示非负。首位为1表示负数,后面是数值位。
-1表示:先看正数:0001为1,减1 ——> 0000表示0,每一位取反 ——> 1111。

-2表示:先看正数:0010,减1(向高位借位) ——> 0001表示1,取反 ——> 1110。

-8:1110,减1 ——> 0111 ——> 1000。
从负数表示确定数,整体取反加一看正数。

2进制:01101110——>16进制:67
0110->6,1110->7

3. 相反数

取反:(~)
a=11010001,~a=00101110

取反之后在加1,就是相反数。e=~a+1.
int b=-a == int b=(~a)+1

有符号整数负数的最小值无法转换相反数。
例:-8:1000 取反 0111 再加1 1000 仍旧是本身。且正数处也无对应。

4. 位运算

或运算"|"
int g=00001010,int h=00001100.
g和h每一位只要有一位是1,1就可以留下来
g|h == 00001110.

与运算"&"
g&h 每一位两个都为1才可以留下来。

异或"^"
g^h 相同为0,不同为1。

与逻辑||和&&区别:
设有一个bool t = a||b;
遇到false才会接续执行。如果为ture进程会直接终止。

t = a&&b;
如果为ture接续执行,如果为false直接终止。

但位运算bool t = a|b
两个一定都会执行,确定了状态之后才能取或。

二进制加法(正负均可)加法逻辑一致,对应位相加,大于1进位。溢出位不管(丢弃)。要自己控制溢出。

,>>>右移,对于正数>>,>>>效果一样,用0来补前面的位,对于负数>>用符号位1来补位,>>>用0来补位.
对于非负数 <<1,等于乘以2,非负数<<3,等于乘以8,<<i,等同于乘以2^i。位数向上提了。
非负数>>1等同于除以2,>>i等同于除以2^i.
只有非负数符合这个特性,负数不要用。

例:num = 01101100
如何确定第i位的状态 ——> num&(1<<i)

#include<bits/stdc++.h>
using namespace std;
#define int long long 

signed main()
{
	ios::sync_with_stdio(0);cin.tie(nullptr);cout.tie(nullptr);
	int n;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		for(int j=31;j>=0;j--)
		{
			cout<<((i&(1<<j))==0?"0":"1");
                        //((i&(1<<j))==1?"1":"0");不正确,&之后的二进制转化为10进制可能不是1,而是0100=4.不能作为判断标准
                        //如果是long类型,要设定(1L<<48).来表示。默认的int没有48位。
		}
		cout<<endl;
	}
	
	return 0;
}

标签:运算,二进制,取反,负数,int,正数,相反数
From: https://www.cnblogs.com/miao-jc/p/18063648

相关文章

  • 003_Numpy的常见运算
    1.加减乘除幂运算importnumpyasnpimportseabornassnsimportmatplotlib.pyplotaspltimportmathfrommatplotlibimportcmdefvisual_2D(array,vmax,vmin):fig_width=math.ceil(array.shape[1]*0.5)fig_length=math.ceil(array.shape[0]*......
  • 如何把一个十进制数转化为一个二进制数
    起因Miqa在改愤怒的小鸟,WA了两个点,尝试画图未遂,于是开调,但是想直观的看到二进制数,所以有了这个工具。#include<bits/stdc++.h>usingnamespacestd;inlinevoidtwice(longlongx){ stack<int>num; while(x!=0) { if(x&1)num.push(1); elsenum.push(0); x>>=1; ......
  • 【c++小课堂】赋值语句与运算符
    赋值语句 赋值语句的介绍与格式赋值语句,我们在上期已经介绍过了,它就是用来给一个变量or常量一个值的。likethis:intq;q=100;格式:变量or常量=值奇奇怪怪的赋值懒人式赋值1,运算符+'='举个例子:inta;a=5;a+=4;//和a=a+4作用一样可以这样写的运算符有:+,-,*,/,%,>>......
  • Java基础_运算符和分支结构
    今天的内容1.运算符2.分支结构if-else1.运算符1.算术运算符2.关系运算符3.逻辑运算符1.1算术运算符自增和自减​目的:让变量自身加一或者减一语法格式:变量++;先执行当前的操作,然后自身再加1++变量;变量--;--变量;packagecom.qf.a_test;public......
  • 不同类型数据运算
    Voltage_Output*51如果Voltage_Output是float型数据,运算下来是什么类型整数提升是指当参与表达式计算的操作数中有不同的整数类型时,较低精度的整数类型会被隐式提升为较高精度的整数类型。在这里,整数常量51会被隐式提升为整数(int)类型,而不是字符(char)类型。如果 Voltage_Ou......
  • C++:递增递减运算符(16)
    递增递减就是自加1或者自减1,但是还有前置递增,后置递增,前置递减,后置递减,两者的区别也大有不同,接下来就去看一下过程a=1b=1b=++aa=2b=2a=1b=1b=a++a=2b=1a=2b=2b=--aa=1b=1a=2b=2b=a--a=1b=2递增前置递增#include<iostream>usingnamespacestd;intmain()......
  • ctfshow--web9 md5二进制格加密的绕过
    dirsearch扫到robots文件查看一下发现有个index.phps文件访问这个index.phps,可以下载下来我们来审计一下这里的代码<?php$flag=""; $password=$_POST['password']; if(strlen($password)>10){ die("passworderror"); } $sql="select*from......
  • C语言02-常量、二进制、数据类型
    第4章常量1.常量特点程序运行时,其值不能改变的量,即为常量。习惯上常量名使用大写,方便与变量区分。2.常量分类​ **字面量常量**:直接使用的常量,不需要定义或声明,包括整数常量、浮点数常量、字符常量。注:有1,2,3等 ——顾名思义,就是数字整数 1.2,1.3,1.4等 ——也就......
  • IQMath定点数运算库性能测试
    基本信息单片机:GD32F303RC,运行主频:120MHz,SRAM:48KB,Flash:256KB,带单精度FPU编译环境:ARMCC5.06update6(build750)由于iq数的底层数据类型是4字节的int32_t因此_iq30~_iq1尽管表示的精度不同,但是运算速度是相同的。下列测试使用_iq15作为被测数据类型,能表示的范围从-65536......
  • 运算符&选择语句
    运算符运算符和表达式概述运算符:对字面量或者变量进行操作的符号;表达式:用运算符把字面量或者变量连接起来符合java语法的式子就可以称为表达式。不同运算符连接的表达式体现的是不同类型的表达式。举例说明:inta=10;intb=20;intc=a+b;+   :是运算符,是算......