运算符与类型转换

 

1.运算符

(1)分类

算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、其他运算符

>.算术运算符:

运算符 描述
+ 把两个操作数相加
- 从第一个操作数中减去第二个操作数
* 把两个操作数相乘
/ 分子除以分母
% 取模运算符,整除后的余数
++ 自增运算符,整数值增加 1
-- 自减运算符,整数值减少 1

>.关系运算符:

运算符 描述
== 检查两个操作数的值是否相等,如果相等则条件为真。
!= 检查两个操作数的值是否相等,如果不相等则条件为真。
> 检查左操作数的值是否大于右操作数的值,如果是则条件为真。
< 检查左操作数的值是否小于右操作数的值,如果是则条件为真。
>= 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。
<= 检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。
using System;

namespace study
{
    public class demo0_operator
    {
        static void Main(string[] args)
        {
            UserControl u1 = new UserControl("1", 2, 3);
            UserControl u2 = new UserControl("1", 4, 5);
            Console.WriteLine("hashcode of u1 is=" + u1.GetHashCode());
            Console.WriteLine("hashcode of u2 is=" + u2.GetHashCode());
            Console.WriteLine("u1==u2 is " + (u1 == u2));

            //demo string
            string s1 = "hello word";
            string s2 = "hello word";
            string s3 = "hello " + "word";
            Console.WriteLine("hashcode of s1 is=" + s1.GetHashCode());
            Console.WriteLine("hashcode of s2 is=" + s2.GetHashCode());
            Console.WriteLine("hashcode of s3 is=" + s3.GetHashCode());
            Console.WriteLine("s1==s2 is " + (s1 == s2));
            Console.WriteLine("s1==s3 is " + (s1 == s3));

            //运行结果如下:

            // hashcode of u1 is=1062342447
            // hashcode of u2 is=472133479
            // u1==u2 is True
            // hashcode of s1 is=-645689584
            // hashcode of s2 is=-645689584
            // hashcode of s3 is=-645689584
            // s1==s2 is True

        }
    }

    public class UserControl
    {
        public string id;
        public int width;
        public int height;

        public UserControl(string id, int width, int height)
        {
            this.id = id;
            this.width = width;
            this.height = height;
        }

        public static bool operator ==(UserControl lhs, UserControl rhs)
        {
            return lhs.id == rhs.id;
        }

        public static bool operator !=(UserControl lhs, UserControl rhs)
        {
            return !(lhs == rhs);
        }

        public override bool Equals(object obj)
        {
            if (obj is UserControl) return false;
            return this == (UserControl)obj;
        }

        public override int GetHashCode()
        {
            return this.ToString().GetHashCode();
        }

        public override string ToString()
        {
            return "控件id:" + this.id + "宽度" + this.width + ";高度:" + this.height;
        }

    }
}

>.逻辑运算符:

运算符 描述
&& 称为逻辑与运算符。如果两个操作数都非零,则条件为真。
|| 称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。
! 称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。

>.位运算符:

位运算符作用于位,并逐位执行操作。&、 | 和 ^ 的真值表如下所示

p q p & q p | q p ^ q
0 0 0 0 0
0 1 0 1 1
1 1 1 1 0
1 0 0 1 1

>.赋值运算符:

运算符 描述
= 简单的赋值运算符,把右边操作数的值赋给左边操作数
+= 加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数
-= 减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数
*= 乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数
/= 除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数
%= 求模且赋值运算符,求两个操作数的模赋值给左边操作数
<<= 左移且赋值运算符
>>= 右移且赋值运算符
&= 按位与且赋值运算符
^= 按位异或且赋值运算符
|= 按位或且赋值运算符

>.其他运算符:

运算符 描述
sizeof() 返回数据类型的大小。
typeof() 返回 class 的类型。
& 返回变量的地址。
* 变量的指针。
? : 条件表达式
is 判断对象是否为某一类型。
as 强制转换,即使转换失败也不会抛出异常。
using System;

namespace study
{
    public class demo2_reflection
    {
        private string currentType = typeof(demo2_reflection).ToString();

        private string value;

        public demo2_reflection(string value)
        {
            this.value = value;
        }

        public void showName()
        {
            Console.WriteLine("currentType is " + currentType);
            Console.WriteLine("value=" + this.value);
        }

        static void Main(string[] args)
        {
            Type t = Type.GetType("study.demo2_reflection");
            Console.WriteLine("type of t is "+t.GetType().ToString());
            Object[] constructParms = new object[] {"hello word"};  //构造器参数
            demo2_reflection obj = (demo2_reflection)Activator.CreateInstance(t, constructParms);
            obj.showName();
        }
    }

}

2.运算符优先级

类别  运算符 
后缀  () [] -> . ++ - -  
一元  + - ! ~ ++ - - (type)* & sizeof 
乘除  * / % 
加减  + - 
移位  << >> 
关系  < <= > >= 
相等  == != 
位与 AND 
位异或 XOR 
位或 OR 
逻辑与 AND  && 
逻辑或 OR  || 
条件  ?: 
赋值  = += -= *= /= %=>>= <<= &= ^= |= 
逗号 

2.类型转换

C#里的类型转换

(1)隐式转换

从类型A到类型B的转换可以在所有情况下进行,执行转换的规则非常简单,可以让编译器执行转换。

隐式转换不需要做任何工作,也不需要另外编写代码。如将int型数据转换成double型数据:

int a = 10;
double b = a;//隐式转换

(2)显式转换

从类型A到类型B的转换只能在某些情况下进行,转换规则比较复杂,应进行某种类型的额外处理。显式转换又叫强制类型转换,显式转换需要用户明确的指定转换类型。如将double类型数据转换成int类型数据:

double c = 10.5;
int d = (int)c;//显示转换

(3)通过方法进行类型转换

序号 方法 & 描述
1 ToBoolean 如果可能的话,把类型转换为布尔型。
2 ToByte 把类型转换为字节类型。
3 ToChar 如果可能的话,把类型转换为单个 Unicode 字符类型。
4 ToDateTime 把类型(整数或字符串类型)转换为 日期-时间 结构。
5 ToDecimal 把浮点型或整数类型转换为十进制类型。
6 ToDouble 把类型转换为双精度浮点型。
7 ToInt16 把类型转换为 16 位整数类型。
8 ToInt32 把类型转换为 32 位整数类型。
9 ToInt64 把类型转换为 64 位整数类型。
10 ToSbyte 把类型转换为有符号字节类型。
11 ToSingle 把类型转换为小浮点数类型。
12 ToString 把类型转换为字符串类型。
13 ToType 把类型转换为指定类型。
14 ToUInt16 把类型转换为 16 位无符号整数类型。
15 ToUInt32 把类型转换为 32 位无符号整数类型。
16 ToUInt64 把类型转换为 64 位无符号整数类型。
using System;

namespace study
{
    public static class  typeConversion
    {
        public static string timeToString(DateTime value)
        {
            return value.ToString("yyyy-MM-dd HH:mm:ss fff");
        }

        public static string timeToStringEx(this DateTime value)
        {
            return value.ToString("yyyy-MM-dd HH:mm:ss fff");
        }

        static void Main(string[] args)
        {
            DateTime now=DateTime.Now;
            Console.WriteLine("timeToString="+typeConversion.timeToString(now));
            Console.WriteLine("timeToStringEx="+now.timeToStringEx());
        }
    }
}
using System;

namespace study
{
    public class typeConversion
    {
        static IUserControl getInstance(string controlName)
        {
            switch (controlName)
            {
                case "TextBox":
                    return new User_TextBox();
                case "Dropdown":
                    return new User_Dropdown();
                default:
                    return new User_TextBox();
            }

        }
        static void Main(string[] args)
        {
            IUserControl contorl1 = new User_TextBox();
            IUserControl contorl2 = new User_Dropdown();

            Console.WriteLine("type of contorl1" + contorl1.GetType().ToString());
            Console.WriteLine("type of contorl2" + contorl2.GetType().ToString());

            IUserControl contorl3 = (IUserControl)contorl2;
            Console.WriteLine("type of contorl3" + contorl3.GetType().ToString());

            IUserControl contorl4 = getInstance("TextBox");
            IUserControl contorl5 = getInstance("Dropdown");

            Console.WriteLine("type of contorl4" + contorl4.GetType().ToString());
            Console.WriteLine("type of contorl5" + contorl5.GetType().ToString());

        }

    }

    public interface IUserControl
    {
        void getControl();
        void checkdata();
        void resetControl();
    }

    public class User_TextBox : IUserControl
    {
        public void checkdata()
        {
            Console.WriteLine("checkdata is User_TextBox");
        }

        public void getControl()
        {
            Console.WriteLine("getControl is User_TextBox");
        }

        public void resetControl()
        {
            Console.WriteLine("resetControl is User_TextBox");
        }
    }
    public class User_Dropdown : IUserControl
    {
        public void checkdata()
        {
            Console.WriteLine("checkdata is User_Dropdown");
        }

        public void getControl()
        {
            Console.WriteLine("getControl is User_Dropdown");
        }

        public void resetControl()
        {
            Console.WriteLine("resetControl is User_Dropdown");
        }
    }

}

mogondb简介

 

MongoDB是一款强大、灵活,且易扩展的通用型数据库,其包含以下设计特点

1.1易于使用

与关系型数据库不同的是,它没有table/rows/records,相反采用更为灵活的文档(document);另外不在预定义模式,即没有数据类型、长度的限制,文档的key跟value不再受这些约束,即添加、删除更容易

1.2易于扩展

MongoDB采用横向扩展,即横向扩展机器。顺带提一下,纵向扩展是加大单机的配置,但始终会出现单机负载不了业务的时候。那横向扩展只需要向集群添加新机器,Mogondb就会自动将现有数据向新服务器传送

1.3丰富的功能

处理能够创建、读取、更新、删除以外,还提供其他不断扩展的功能:索引、聚合、特殊的集合类型(如某个时刻过期的sesssion、也支持固定大小的集合,用于保存近期的数据,如日志)、文件存储

但mongodb并不具备存在于关系型数据中的一些功能,如:jon和复杂的事务,因为在分布式的系统中这两个功能难以高效的实现

运算符与类型转换 mogondb简介的更多相关文章

  1. Python教程(2.3)——运算符和类型转换

    Python里有很多运算符(operator),这节就让我们来详细学一学. 注意:本文没有特别说明的地方,只考虑bool.int.float三种类型.例如"两边操作数类型相同时,得到的结果为 ...

  2. [C++ Primer] : 第14章: 重载运算符与类型转换

    基本概念 重载运算符是具有特殊名字的函数: 它们的名字由关键字operator和其后要定义的运算符号共同组成. 重载运算符函数的参数数量与该运算符作用的运算对象数量一样多. 对于二元运算符来说, 左侧 ...

  3. 【C++】C++中重载运算符和类型转换

    输入输出运算符 输入输出运算符 输入输出运算符 算术和关系运算符 相等运算符 关系运算符 赋值运算符 复合赋值运算符 下标运算符 递增和递减运算符 成员访问运算符 函数调用运算符 lambda是函数对 ...

  4. C# 篇基础知识2——运算符、类型转换、流程控制、枚举、结构体和数组、函数

    1.运算符.类型转换 计算某年y某月m某日d是周几的基姆拉尔森公式公式:int week = (d + 2*m + 3*(m + 1)/5 + y + y/4 - y/100 + y/400 + 1) ...

  5. # c++运算符重载之 前置++, 后置++, 负号运算符, 类型转换函数, 以及输入输出运算符

    c++运算符重载之 前置++, 后置++, 负号运算符, 类型转换函数, 以及输入输出运算符 标签(空格分隔): c++ 前言 我在c++学习的过程中, 对这几个不太常见的运算符重载不太会写.出现了很 ...

  6. python 全栈开发,Day50(Javascript简介,第一个JavaScript代码,数据类型,运算符,数据类型转换,流程控制,百度换肤,显示隐藏)

    一.Javascript简介 Web前端有三层: HTML:从语义的角度,描述页面结构 CSS:从审美的角度,描述样式(美化页面) JavaScript:从交互的角度,描述行为(提升用户体验) Jav ...

  7. 前端JavaScript(1) --Javascript简介,第一个JavaScript代码,数据类型,运算符,数据类型转换,流程控制,百度换肤,显示隐藏

    一.Javascript简介 Web前端有三层: HTML:从语义的角度,描述页面结构 CSS:从审美的角度,描述样式(美化页面) JavaScript:从交互的角度,描述行为(提升用户体验) Jav ...

  8. C++ Primer : : 第十四章 : 重载运算符与类型转换之类型转换运算符和重载匹配

    类型转换运算符 class SmallInt { public: SmallInt(int i = 0) : val(i) { if (i < 0 || i > 255) throw st ...

  9. HTML 运算符、类型转换

    1.类型转换: 分为自动转换和强制转换,一般用强制转换. 其他类型转换为整数:parseInt(): 其他类型转换为小数:parseFloat(): 判断是否是一个合法的数字类型:isNaN(): 是 ...

随机推荐

  1. Xcode导入第三方库图文

    Three20这个与facebook亲戚的开源库是蜚声iPhone开发界,很多App都有它的影子,主要是其真得是功能强大.那么如何将Three20库添加到自己的项目中应用呢?一种是Python命令方式 ...

  2. ubuntu卸载编译安装的软件

    cd 源代码目录 make clean ./configure make make uninstall

  3. (十九)python 3 内嵌函数和闭包

    内嵌函数:函数里又嵌套一个函数 def fun1(): print('fun1()在被调用') def fun2(): print('fun2()在被调用') fun2() 闭包: 闭包是函数里面嵌套 ...

  4. Spring异常——BeanNotOfRequiredTypeException

    使用junit测试ssh搭建的框架的时候,遇到了一个异常: 异常消息: org.springframework.beans.factory.BeanCreationException: Error c ...

  5. Android开发——流量统计

    1. 获取应用UID 在设备的proc目录下我们可以看到一些比较熟悉的目录/文件,比如data,system,cpuinfo(获取CPU信息)等,其中uid_stat的各个以应用Uid命名的目录下,便 ...

  6. springMVC 文件上传 HTTP Status 400 – Bad Request

    可能原因是:multipartResolver没有配置正确 请看解决方案: <!--文件上传 id必须为multipartResolver,不然报错HTTP Status 400 – Bad R ...

  7. 大数据学习——hadoop的RPC框架

    项目结构 服务端代码 test-hadoop-rpc pom.xml <?xml version="1.0" encoding="UTF-8"?> ...

  8. 如何安装python包

    安装python包有两种方法: 使用Python包管理器pip工具 在Linux系统中,首先 yum install python-pip 然后就可以欢快的pip install *** 啦 源代码安 ...

  9. 76. Spring Boot完美解决(406)Could not find acceptable representation原因及解决方法

    [原创文章]        使用Spring Boot的Web项目,处理/login请求的控制器方法(该方法会返回JSON格式的数据).此时如果访问localhost:8080/login.html, ...

  10. ms sql server 大批量导入

    BULK INSERT 文章:BULK INSERT如何将大量数据高效地导入SQL Server 可以首先在数据库建一个表Temp_tb,这个表作为导入数据的表,然后使用bulk insert导入,导 ...