编程技术是改变世界的力量。
本站
当前位置:网站首页 > 后端语言 > 正文

Unity3d教程 C#基础知识第四篇运算符

gowuye 2024-05-16 14:41 4 浏览 0 评论

上一章 Unity3d教程 C#基础知识第三篇变量&数据类型

本章内容

  1. 占位符
  2. 关系运算符
  3. 逻辑运算符
  4. 位运算符
  5. 赋值运算符及其他运算符


  • 占位符

Console.WriteLine("a+b = {0}", (a + b));

Console.WriteLine("a = {0} , b = {1}", a , b);

Console.WriteLine("a = {0} , b = {1},c = {2}", a , b ,c);

在代码中,上述写法中 {0},{1}是占位符,里面的数字可以不断递增,然后用后面的变量按先后顺序替换到对应的占位符。当然前面有几个占位符,后面就得跟多少个变量。否则会报错。

用这种方式的好处是,字符串对象只会生成一个,而通过以下方式运算的则会生成多个

Console.WriteLine("a = " + a); //产生 字符串a= 和 a = a;

Console.WriteLine("a = " + a + " b = "); //产生 字符串a= 和 a = a 和 a = a b =;

当然字符串加变量的形式才会产生多个变量,而字符串加字符串的话,在编译期就会直接生拼接成一个字符串了,不会等到代码运行的时候再拼接。


  • 算数运算符

+

把两个操作数相加

A + B 将得到 30

-

从第一个操作数中减去第二个操作数

A - B 将得到 -10

*

把两个操作数相乘

A * B 将得到 200

/

分子除以分母

B / A 将得到 2

%

取模运算符,整除后的余数

B % A 将得到 0

++

自增运算符,整数值增加 1

A++ 将得到 11

--

自减运算符,整数值减少 1

A-- 将得到 9


运行以下代码

using System;

namespace FirstProject
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 30;
            int b = 10;

            Console.WriteLine("a,b = {0}", (a + b));
            Console.WriteLine("a - b = {0}", (a - b));
            Console.WriteLine("a * b = {0}", (a * b));
            Console.WriteLine("a % b = {0}", (a % b));

            Console.WriteLine("a++ = {0}", (a++));
            Console.WriteLine("a = {0}", a);
            Console.WriteLine("++a = {0}", (++a));

            Console.WriteLine("b-- = {0}", (b--));
            Console.WriteLine("b = {0}", b);
            Console.WriteLine("--b = {0}", (--b));
        }
    }
}

上述代码块中,结果已经在注释中标明,基本+,-,*,*是没有疑问的。

而存在疑问的方面在于++ 和 --

++ 表示自增

放变量后面是先运算,运算结束后,自增1,所以a++结果看到是30.但是下一句打印a的结果是31.

放变量前面则是先自增1,然后再运算,所以可以看到++a的结果是31+1 = 32,


-- 表示自减去

放变量后面是先运算,运算结束后,自减1,所以a--结果看到是10,但是运算结束后,下一句打印是9.

放变量前面是先自减1,然后进行运算,所有--b的结果是9-1=8。

  • 关系运算符


==

检查两个操作数的值是否相等,如果相等则条件为真。

(A == B) 不为真。

!=

检查两个操作数的值是否相等,如果不相等则条件为真。

(A != B) 为真。

>

检查左操作数的值是否大于右操作数的值,如果是则条件为真。

(A > B) 不为真。

<

检查左操作数的值是否小于右操作数的值,如果是则条件为真。

(A < B) 为真。

>=

检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。

(A >= B) 不为真。

<=

检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。

(A <= B) 为真。

using System;

namespace FirstProject
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 30;
            int b = 10;

            Console.WriteLine("a == b  {0}", a == b);  //a == b  False
            Console.WriteLine("a != b  {0}", a != b);     //a != b  True
            Console.WriteLine("a > b = {0}", a > b);    //a > b = Tru
            Console.WriteLine("a < b = {0}", a < b);    //a < b = False
            Console.WriteLine("a >= b = {0}", a >= b); //a >= b = True
            Console.WriteLine("a <= b = {0}", a <= b);   //a <= b = False
        }
    }
}

关系运算符编译运行下就知道了,没啥难度。

  • 逻辑运算符

&&

称为逻辑与运算符。如果两个操作数都非零,则条件为真。

(A && B) 为假。

||

称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。

(A || B) 为真。

!

称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。


using System;

namespace FirstProject
{
    class Program
    {
        static void Main(string[] args)
        {
            bool a = true;
            bool b = true;
            bool c = false;
            bool d = false;

            Console.WriteLine("True && True = {0}", a && b);    //True && True = True
            Console.WriteLine("True && False = {0}", a && c);   //True && False = False
            Console.WriteLine("False && True = {0}", c && a);   //False && True = False
            Console.WriteLine("False && False = {0}", c && d);  //False && False = False

            Console.WriteLine("True || True = {0}", a || b);     //True || True = True
            Console.WriteLine("True || False = {0}", a || c);    //True || False = True
            Console.WriteLine("False || True = {0}", c || a);    //False || True = True
            Console.WriteLine("False ||False = {0}", c || d);    //False ||False = False

            Console.WriteLine("!True= {0}", !a);                  //!True= False
            Console.WriteLine("!False= {0}", !c);                //!False= True
        }
    }
}
  • 位运算符

&

如果同时存在于两个操作数中,二进制 AND 运算符复制一位到结果中。

(A & B) 将得到 12,即为 0000 1100

|

如果存在于任一操作数中,二进制 OR 运算符复制一位到结果中。

(A | B) 将得到 61,即为 0011 1101

^

如果存在于其中一个操作数中但不同时存在于两个操作数中,二进制异或运算符复制一位到结果中。

(A ^ B) 将得到 49,即为 0011 0001

~

按位取反运算符是一元运算符,具有"翻转"位效果,即0变成1,1变成0,包括符号位。

(~A ) 将得到 -61,即为 1100 0011,一个有符号二进制数的补码形式。

<<

二进制左移运算符。左操作数的值向左移动右操作数指定的位数。

A << 2 将得到 240,即为 1111 0000

>>

二进制右移运算符。左操作数的值向右移动右操作数指定的位数。

A >> 2 将得到 15,即为 0000 1111

10进制是什么?平时大家数学计算都是10进制了(9+1 = 10,19+1=20,逢10.),二进制就是1+1 = 10, 10+1 = 11,11 + 1 = 100;即逢2进1.


&操作(上下必须都是1,结果才是1,否则都是0)示例 :

int a = 60, 这里的60是10进制的,转换成二进制表示是 00111100;

int b = 13, 转换成二进制表示是0000 1101;

a & b按位操作计算如下图所示,最终得到的二进制是 0000 1100. 十进制结果就是12.


按位与操作

注意 :这里有个问题,为啥非得转成二进制计算,然后又转成十进制结果。

科普一下 :内存中存储的数据0和1,只是你定义变量时,告诉电脑说,这块内存是int型的。即之前文章讲到的为什么变量前面要带类型的原因。电脑读取数据后才转换成整型显示给你看而已。


| 操作(上下只要有一个1,结果就是1)示例 :

int a = 60, 二进制表示是 00111100;

int b = 13, 二进制表示是 0000 1101;

a | b 计算如下图所示,最终得到的二进制是 0000 1100. 十进制结果就是 61.

按位或

^ 操作(上下不同则为1,相同则为0)

int a = 60, 二进制表示是 00111100;

int b = 13, 二进制表示是 0000 1101;

a | b 计算如下图所示,最终得到的二进制是 0011 0001. 十进制结果就是49.

异或操作


~操作 (按位取反)

注意 :或操作比较特别,因为上面的操作都是不超过8位的,再介绍基本数据类型中,而int数据是有符号位的,即首位代表整数是正是负数,而且整型数据是32位的存储空间,上面其实忽略的前面24位的方式进行描述的,因为不影响讲解。但是按位取反不一样,连符号位都会被取反。

int a = 60, 二进制32位完整表示是 0000 0000 0000 0000 0000 0000 0011 1100;

按位取反结果是 1111 1111 1111 1111 1111 1111 1100 0011;

取反后结果是 -61. 当然-61是怎么来的。

当取反结果加上a后会发现结果全是1,然后再加1的话,就会前面32都会变成0,然后1溢出了。int只有32位,所以只计算32, 那么是不是发现取反结果加上61的话就等于0呢。

所以1111 1111 1111 1111 1111 1111 1100 0011结果就是-61。


0000 0000 0000 0000 0000 0000 0011 1101

+ 1111 1111 1111 1111 1111 1111 1100 0011

——————————————————————

0000 0000 0000 0000 0000 0000 0000 0000


上面的计算就是 ~a + 61 = 0; ——》 ~a = -61;


<< 左移

int a = 60, 二进制32位完整表示是 0000 0000 0000 0000 0000 0000 0011 1100;

左移2位 0000 0000 0000 0000 0000 0000 1111 0000;

结果是 a << 2 = 240;



>> 右移

int a = 60, 二进制32位完整表示是 0000 0000 0000 0000 0000 0000 0011 1100;

右移2位 0000 0000 0000 0000 0000 0000 0000 1111;

结果是 a >> 2 = 15;


  • 赋值运算符及其他运算符

=

简单的赋值运算符,把右边操作数的值赋给左边操作数

C = A + B 将把 A + B 的值赋给 C

+=

加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数

C += A 相当于 C = C + A

-=

减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数

C -= A 相当于 C = C - A

*=

乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数

C *= A 相当于 C = C * A

/=

除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数

C /= A 相当于 C = C / A

%=

求模且赋值运算符,求两个操作数的模赋值给左边操作数

C %= A 相当于 C = C % A

<<=

左移且赋值运算符

C <<= 2 等同于 C = C << 2

>>=

右移且赋值运算符

C >>= 2 等同于 C = C >> 2

&=

按位与且赋值运算符

C &= 2 等同于 C = C & 2

^=

按位异或且赋值运算符

C ^= 2 等同于 C = C ^ 2

|=

按位或且赋值运算符

C |= 2 等同于 C = C | 2

相关推荐

Nginx 响应提速10倍,你需要知道的缓存性能优化——FastCGI调优
Nginx 响应提速10倍,你需要知道的缓存性能优化——FastCGI调优

Nginx缓存优化是帮助大家提升网站性能的重要操作之一,proxy_cache主要用于反向代理时,对后端内容源服务器进行缓存;fastcgi_cache主要用于...

2024-05-20 14:44 gowuye

王者荣耀天魔缭乱和逐梦之音返场活动地址 3月22日开启返场活动
王者荣耀天魔缭乱和逐梦之音返场活动地址 3月22日开启返场活动

王者荣耀官方终于确定了天魔缭乱和逐梦之音的返场活动,这让不少小伙伴乐开了花,返场活动将会在3月22日开启,下面就带来王者荣耀天魔缭乱和逐梦之音返场活动地址!王者...

2024-05-20 14:44 gowuye

常见的嵌入式web服务器有哪些?

嵌入式WEB服务器常见的有:Lighttpd,Shttpd,Thttpd,Boa,Mini_httpd,Appweb,Goahead。Lighttpd地址:http://www.light...

简述几款常见的嵌入式web服务器
简述几款常见的嵌入式web服务器

嵌入式web服务器,是web服务器当中的一种,是基于嵌入式系统而实现的web服务器。指的是在嵌入式系统(通俗点就是单片机系统)上实现的一个web服务器,可以通过...

2024-05-20 14:44 gowuye

教你如何利用fastcgi_cache缓存加速WordPress

在使用nginx缓存之前,必须在nginx里面加载专门的模块,这个模块叫做ngx_cache_purge。添加ngx_cache_purge模块下载ngx_cache_purge模块ngx_cache...

扫描WordPress漏洞

检测已知漏洞WPScan是一款广泛使用的WordPress安全扫描工具,它的一项重要功能是检测已知漏洞。在这篇文章中,我们将深入探讨WPScan如何检测已知漏洞,并结合实际示例,帮助读者更好地理解和应...

消灭 Bug!推荐几个给力的开源 Bug 跟踪工具
消灭 Bug!推荐几个给力的开源 Bug 跟踪工具

在这个充满bug的世界里,最遥远的距离不是生与死,而是你亲手制造的bug就在你眼前,你却怎么都找不到它。因此本文准备了7款优秀的开源bug跟踪系...

2024-05-20 14:43 gowuye

生物信息分析入门全攻略

生物信息学是生命科学研究的重大前沿领域,未来将占据生命科学研究的半壁江山。已经有越来越多的小伙伴投入到生物信息的学习中,但是入门难、深入慢、摸不到方向等都成为持续学习的拦路虎。本文根据生物信息技术大牛...

elkb实践经验,再赠送一套复杂的配置文件
elkb实践经验,再赠送一套复杂的配置文件

原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。宝剑锋从磨砺出,梅花香自苦寒来。诗人白居易,三月下江南,看到沿路开放的桃花,心潮澎湃...

2024-05-20 14:43 gowuye

超详细从0到1 搭建ELK监控
超详细从0到1 搭建ELK监控

监控分类?Metrics用于记录可聚合的数据。例如,1、队列的当前深度可被定义为一个度量值,在元素入队或出队时被更新;HTTP请求个数可被定义为一个计数器,...

2024-05-20 14:42 gowuye

嵌入式开发 之Web配置页面开发
嵌入式开发 之Web配置页面开发

1.PHP是最好的语言??开发动态页面首选的语言是PHP,村村不能在这里忽悠人,如果你的硬件性能允许切略懂PHP,看到这里就可以退出了。本文面向的受众是Linu...

2024-05-20 14:42 gowuye

Python开发一个网站目录扫描工具用来检测网站是否有漏洞?
Python开发一个网站目录扫描工具用来检测网站是否有漏洞?

开发一个网站目录扫描工具是用来检测网站是否有非法目录请求的一个常见需求之一,我们要通过这个扫描工具来找到通过某个域名可以访问到的网站路径,可能对于有些系统来讲,...

2024-05-20 14:42 gowuye

创建一个类似Youtube的Id——使用PHP/Python/JS/Java/SQL

id通常都是用数字,不巧的是只有10个数字来使用,所以如果你有很多的记录,id往往变得非常冗长。当然对于计算机来说无所谓,但我们更希望id尽可能短。所以我们如何能使id变短?我们可以利用字母让它们附加...

快速云:有助于移动应用安全开发的五条妙计
快速云:有助于移动应用安全开发的五条妙计

许多企业不断地向其开发团队提供培训。但是某些漏洞,如早在十多年前就发现的SQL注入,如今仍广泛存在于各种应用中。因而,安全培训永不过时。在开发移动应用时,开发者...

2024-05-20 14:41 gowuye

洛杉矶国际电影节最佳动画短片奖影片《G’DAY》正式全网上映
洛杉矶国际电影节最佳动画短片奖影片《G’DAY》正式全网上映

7月2日,由M&CSaatchi创作,由深受好评的澳大利亚导演迈克尔·格雷西执导的动画短片《G’day》,正式在全网上映。该影片因其出色的创意赢得了洛...

2024-05-20 14:41 gowuye

取消回复欢迎 发表评论: