首页 > 其他分享 >09-操作符详解

09-操作符详解

时间:2023-06-25 12:12:35浏览次数:34  
标签:09 int 左移 补码 include 详解 操作符 main

@

目录

一. 算数操作符

1. 算数操作符分类:

+ - * / %
  1. 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。
  2. 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。
  3. % 操作符的两个操作数必须为整数。返回的是整除之后的余数。

二. 移位操作符

1. 移位符分类. 注:移位操作符的操作数只能是整数, 以下对于数据以二进制码形式展示不全, 只展示了16位正确的是需要写成4个字节32位才对。

>> <<

一. 左移运算符
注意: 对于负数的左移需要在补码的基础上进行, 任何对负数的操作都是基于补码形式, 因为机器中负数就是以补码形式纯在

  1. 左移操作符规则: 左边抛弃, 右边补0;
  2. 负数左移过程详解: 1000000000000101(源码) -> 1111111111111010(反码) -> 1111111111111011(补码) -> 1111111111101100(补码左移两位) -> 1111111111101011(左移两位的反码) -> 1000000000010100(左移两位的源码) = -20
#include <stdio.h>

int main()
{
	int a = 5;        // 0000000000000101
	int b = -5;       // 1000000000000101
	int x = a << 2;   // 20
	int y = a << 2;   // -20

	printf("%d \n", x);
	printf("%d \n", y);

	return 0;
}
/*
	证明负数在左移的时候, 左值是直接丢弃的. 11000000000000000000000000000000(源码) ->
	10111111111111111111111111111111(反码) -> 11000000000000000000000000000000(补码) -> 
	00000000000000000000000000000000(左移两位,, 注意之里左移两位后变成了0, 所以这里的补码也就
	是源码所以结果输出为0)
*/
#include <stdio.h>

int main()
{
	int a = -1073741823;        // 11000000000000000000000000000000
	
	int x = a << 2;   // 0

	printf("%d \n", x);
	
	return 0;
}

二. 右移运算符
注意: 右移运算符分为两种, 算数位移和逻辑位移. 以如下两段代码分别作为示例.

  1. 算数位移: 左边用原来的符号位填充, 右边丢弃.
  2. 逻辑位移: 左边用0填充, 右边丢弃
//算数位移
#include <stdio.h>

int main() {
   int x = -5;
   int y = x >> 2;    // -2
   printf("%d\n", y);
   return 0;
}
//逻辑位移
#include <stdio.h>

int main() {
   unsigned int x = -5;
   unsigned int y = x >> 2;  //1073741822
   printf("%u\n", y); 
   return 0;
}

三. 位操作符

1. 位操作符分类:

& | ^
//面试题案例: 不能创建临时变量(第三个变量),实现两个数的交换。
#include <stdio.h>
int main()
{	
 	int a = 10;
 	int b = 20;
 	//function One;
 	a = a + b;
 	b = a - b;
 	a = a - b;
 	//function Two;
 	a = a^b;
 	b = a^b;
	a = a^b;
 	printf("a = %d b = %d\n", a, b);
 	return 0;
}

四. 赋值操作符

1. 基本赋值符

= 是基本的赋值操作符

2. 复合赋值符

+= -= *= /= %= >>= <<= &= |= ^=

五. 单目操作符

1. 单目操作符分类

! - + & sizeof ~ -- ++ * (类型)
逻辑反 负值 正值 取地址 操作数的类型长度 按位取反 前后置-- 前后置++ 解引用 强制类型转换

sizeof详解:

  1. sizeof计算表达式大小的时候在编译期间, 所以sizeof()中的表达式不参与运算.
#include <stdio.h>
int main()
{
	short s = 5;
	int a = 10;

	printf("%d \n", sizeof(s = a + 2));  // 2
	printf("%d \n", s);					 // 5
}

标签:09,int,左移,补码,include,详解,操作符,main
From: https://www.cnblogs.com/Deng-S/p/17502593.html

相关文章

  • Notes.views.2023-6-25 09:25:45
    目录001011章节123小节不分级备注用———符号,也不特意分级......
  • spring-boot-maven-plugin插件详解
    一、为什么SpringBoot项目自带这个插件当我们在SpringBoot官方下载一个脚手架时,会发现pom.xml会自带spring-boot-maven-plugin插件<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2......
  • 详解 HTTPS 概念
    我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取。所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议。HTTPS简介HTTPS其实是有两部分组成:HTTPSSL/TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传......
  • Android面试题合集大全(2023最新版),1600+面试题附答案详解,字节大佬力推
    接触Android已经3年,在工作中遇到疑难问题总是在网上(csdn大牛博客,stackoverflow等)搜索答案,各位大牛大神总是把自己的经验分享出来,帮助我们这些需要帮助的人,由此表示衷心感谢!然而现在自己细想了一下,自己也是时候把遇到的问题并把解决方案分享出来,希望能帮助到有需要的人。现在小公司......
  • 仙境传说脚本RO:NPC对话| mes/next/close函数用法详解
    仙境传说脚本RO:NPC对话|mes/next/close函数用法详解大家好,我是艾西,今天跟大家讲解下仙境传说mes/next/close函数,在游戏中所有的NPC对话都是用mes函数来创建的。我们先打开官方文档的script_commands.txt文件,搜索*messearch*mesmes"Hello,world!";注意:默认是没有关团或next按......
  • c语言-字符串+转义字符+注释、语句、函数、数组、操作符 2
    一、字符串+转义字符+注释字符串类型(相较于字符数据类型):eg:“”;//空字符串定义:由双引号引起的一串字符为字符串字面值,简称字符串。(后面默认会有\0,结束标志不算内容intmain(){chararr1[]="abc";//数组//"abc"——'a''b''c''\0'——'\0'......
  • 正交编码与正交沃尔什函数详解
    本专栏包含信息论与编码的核心知识,按知识点组织,可作为教学或学习的参考。markdown版本已归档至【Github仓库:<https://github.com/timerring/information-theory>】或者公众号【AIShareLab】回复信息论获取。正交编码正交编码的基本概念正交性若两个周期为T的模拟信号和......
  • Struts2漏洞学习(s2-001——s2-009)
    Struts2漏洞复现Struts2是一个基于MVC设计模式的Web应用框架S2-001漏洞原理:后端将用户之前提交的参数使用OGNL表达式%{}进行解析,然后重新填充到对应的表单数据中,例如注册或登录页面,提交失败后端一般会默认返回之前提交的数据,由于后端使用%{value}对提交的数据执行了一次OGNL表达式......
  • DPST1091 23T2
    DPST109123T2Assignment1-CSDefenceTowerDefenceisaspecificgenreofgamesthatboomedinthelate2000s.Manyinnovativegameswerecreatedunderthisgenrethatpushednewandexcitingideas!Thecoremechanicsofthesetypesofgamesareactually......
  • Netstat查看端口状态,netstat命令详解
    概述netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。Netstat查看端口状态1、点击左下角的【开始】,找到运行,或是直接快捷键【win+R】打开运行窗口2、在运行窗口输入cmd,然后点击【确定】,这时就会进入MSDOS界面,......