精华内容
下载资源
问答
  • 逻辑运算和关系运算

    千次阅读 2014-12-16 13:56:53
    今天把逻辑运算和关系运算的小节看了。 比较有帮助的,在于长路运算和短路运算。 本来我在C当中,只学习了&&、||这样的与、或运算。 但是java当中,有短路运算,以及非短路运算。 例如: (x=0时,则结果必为...

    今天把逻辑运算和关系运算的小节看了。

    比较有帮助的,在于长路运算和短路运算。

    本来我在C当中,只学习了&&、||这样的与、或运算。

    但是java当中,有短路运算,以及非短路运算。

    例如:

    (x<0)&&(y<0) 当x>=0时,则结果必为flase,因此不需要再计算(y<0);

    (x<0)&(y<0)    当x>=0时,则结果必为flase,但是此时还需要再计算(y<0);


    一开始我还挺不理解,为什么要用这两个不同的运算符号,而且都是用来同种运算。

    短路运算的意义在于哪里?反正结果都一样。

    然后经过视频老师说的提高效率,才想到这样可以节省很多不必要的功夫。只是要注意,如果是短路运算,那么后面就不会被计算了。

    例如:

    (x<0)||(++y<100) 当x>0时,则不会再计算后面的(++y<=100),而相应的,y的值也不会改变。

    而所谓逻辑表达式,是指含有逻辑运算符且计算结果,为boolean类型的表达式。

    而在之后的例子,

    发现关系运算的优先级,是高于逻辑运算的。
    例如:
    5>4&&9<9
    在这里,先比较左边的5>4,结果为ture

    再比较9<9,结果为flase

    最后才是逻辑运算ture&&flase,最后结果为flase


    而且关于逻辑运算当中的优先级,也是不同的。
    &&与运算高于||或运算,

    而:&>^(逻辑异或)>|

    最后,在案例编程中,感觉自己对Scanner的运用还不熟练,比如运用之前,要加载它的包。还有先引用它定义它:scanner 名=new scanner(system.in);

    具体代码如下:
    package hellow;


    import java.util.Scanner;


    public class jike2 {
    public static void main(String[] args) {
    Scanner p=new Scanner(System.in);
    System.out.println("请输入一个数:");
    int n=p.nextInt();
    //boolean y=n>=0&&n<=5;
    //boolean y=n<0||n>5;
    boolean y=!(n<0||n>5);
    System.out.println(n+"的结果为"+y);
    }
    }

    展开全文
  • 指针运算——算术运算、关系运算

    千次阅读 2015-07-02 10:34:54
    是不是对指针的任何运算都是合法的呢?答案是它可以执行某些运算,但并非所有的运算都合法。除了加法运算之外,你还可以对指针执行一些其他运算,但并不是很多。  指针加上一个整数的结果是另一个指针。问题是,它...

     是不是对指针的任何运算都是合法的呢?答案是它可以执行某些运算,但并非所有的运算都合法。除了加法运算之外,你还可以对指针执行一些其他运算,但并不是很多。

        指针加上一个整数的结果是另一个指针。问题是,它指向哪里?如果你将一个字符指针加1,运算结果产生的指针指向内存中的下一个字符。float占据的内存空间不止1个字节,如果你将一个指向float的指针加1,将会发生什么?它会不会指向该float值内部的某个字节呢?

       答案是否定的。当一个指针和一个整数量进行算术运算时,整数在执行加法运算前始终会根据合适的大小进行调整。这个“合适的大小”就是指针所指向类型的大小,“调整”就是把整数值和“合适的大小”相乘。为了更好的说明,试想在某台机器上,float占据4个字节。在计算float型指针加3的表达式时候,这个3将根据float类型的大小(此例中为4)进行调整(相乘),这样实际上加到指针上的整型值为12。

         把3与指针相加使指针的值增加3个float的大小,而不是3个字节。这个行为较之获得一个指向一个float值内部某个位置的指针更为合理。下表包含了一些加法运算的例子。调整的美感在于指针算法并不依赖于指针的类型。换句话说,如果p是个指向float的指针,那么p+1就指向下一个float,其他类型也是如此。

     1.算术运算

        C的指针的算术运算只局限于两种形式。第一种形式是:    指针+-整数  标准定义这种形式只能用于指向数组中某个元素的指针,如图所示:

    并且这类表达式的结果类型也是指针。这种形式也适用于使用malloc函数动态分配获得的内存。

    对一个指针加1使它指向数组中的下一个元素,加5使它向右移动5个元素的位置,依次类推。把一个指针减去3使它向左移动3个元素的位置。

    第二种类型的指针运算具有如下的形式:   指针—指针

    只有当两个指针都指向同一个数组中的元素时,才允许从一个指针减去另一个指针,如下所示:

    两个指针相减的结果的类型是ptrdiff_t,它是一种有符合整数类型。减法运算的值是两个指针在内存中的距离(以数组元素的长度为单位,而不是以字节为单位),因为减法运算的结果将除以数组元素类型的长度

    如果两个指针所指向的不是同一个数组中的元素,那么它们之间相减的结果是未定义的。程序员无从知道两个数组在内存中的相对位置,如果不知道这一点,两个指针之间的距离就毫无意义。

    2.关系运算:   <   <=   >   >=  不过前提是它们都指向同一个数组中的元素。根据你所使用的操作符,比较表达式将告诉你哪个指针指向数组中更前或更后的元素。标准并未定义如果两个任意的指针进行比较会产生什么结果。

    转自:
    http://www.cnblogs.com/candyming/archive/2011/11/26/2263090.html

    1. #include<stdio.h>  
    2. int main()  
    3. {  
    4.     char a[20]=" You_are_a_girl";  
    5.     char *p=a;  
    6.     <span style="color:#FF0000;">char **ptr=&p;</span>  
    7.     //printf("p=%d\n",p);  
    8.     //printf("ptr=%d\n",ptr);  
    9.     //printf("*ptr=%d\n",*ptr);  
    10.     printf("**ptr=%c\n",**ptr);  
    11.     ptr++;  
    12.     //printf("ptr=%d\n",ptr);  
    13.     //printf("*ptr=%d\n",*ptr);  
    14.     printf("**ptr=%c\n",**ptr);  
    15. }  

    误区一、输出答案为Y 和o

    误解:ptr 是一个char 的二级指针,当执行ptr++;时,会使指针加一个sizeof(char),所以输出如上结果,这个可能只是少部分人的结果.

    误区二、输出答案为Y 和a

    误解:ptr 指向的是一个char *类型,当执行ptr++;时,会使指针加一个sizeof(char *)(有可能会有人认为这个值为1,那就会得到误区一的答案,这个值应该是4,参考前面内容), 即&p+4; 那进行一次取值运算不就指向数组中的第五个元素了吗?那输出的结果不就是数组中第五个元素了吗?答案是否定的.

    正解: ptr 的类型是char **,指向的类型是一个char *类型,该指向的地址就是p的地址(&p),当执行ptr++;时,会使指针加一个sizeof(char*),即&p+4;那*(&p+4)指向哪呢,这个你去问上帝吧,或者他会告诉你在哪?所以最后的输出会是一个随机的值,或许是一个非法操作.

    总结一下:

    一个指针ptrold 加(减)一个整数n 后,结果是一个新的指针ptrnewptrnew 的类型和ptrold 的类型相同,ptrnew 所指向的类型和ptrold所指向的类型也相同。ptrnew 的值将比ptrold 的值增加(减少)了n 乘sizeof(ptrold 所指向的类型)个字节。就是说,ptrnew 所指向的内存区将比ptrold 所指向的内存区向高(低)地址方向移动了n 乘sizeof(ptrold 所指向的类型)个字节。

    指针和指针进行加减:

    两个指针不能进行加法运算这是非法操作,因为进行加法后,得到的结果指向一个不知所向的地方,而且毫无意义。两个指针可以进行减法操作,但必须类型相同,一般用在数组方面,不多说了


    1. #include<stdio.h>  
    2. int main()  
    3. {  
    4.     char a[20]=" You_are_a_girl";  
    5.     char *p=a;  
    6.     <span style="color:#FF0000;">char **ptr=&p;</span>  
    7.     //printf("p=%d\n",p);  
    8.     //printf("ptr=%d\n",ptr);  
    9.     //printf("*ptr=%d\n",*ptr);  
    10.     printf("**ptr=%c\n",**ptr);  
    11.     ptr++;  
    12.     //printf("ptr=%d\n",ptr);  
    13.     //printf("*ptr=%d\n",*ptr);  
    14.     printf("**ptr=%c\n",**ptr);  
    15. }  

    误区一、输出答案为Y 和o

    误解:ptr 是一个char 的二级指针,当执行ptr++;时,会使指针加一个sizeof(char),所以输出如上结果,这个可能只是少部分人的结果.

    误区二、输出答案为Y 和a

    误解:ptr 指向的是一个char *类型,当执行ptr++;时,会使指针加一个sizeof(char *)(有可能会有人认为这个值为1,那就会得到误区一的答案,这个值应该是4,参考前面内容), 即&p+4; 那进行一次取值运算不就指向数组中的第五个元素了吗?那输出的结果不就是数组中第五个元素了吗?答案是否定的.

    正解: ptr 的类型是char **,指向的类型是一个char *类型,该指向的地址就是p的地址(&p),当执行ptr++;时,会使指针加一个sizeof(char*),即&p+4;那*(&p+4)指向哪呢,这个你去问上帝吧,或者他会告诉你在哪?所以最后的输出会是一个随机的值,或许是一个非法操作.

    总结一下:

    一个指针ptrold 加(减)一个整数n 后,结果是一个新的指针ptrnew,ptrnew 的类型和ptrold 的类型相同,ptrnew 所指向的类型和ptrold所指向的类型也相同。ptrnew 的值将比ptrold 的值增加(减少)了n 乘sizeof(ptrold 所指向的类型)个字节。就是说,ptrnew 所指向的内存区将比ptrold 所指向的内存区向高(低)地址方向移动了n 乘sizeof(ptrold 所指向的类型)个字节。

    指针和指针进行加减:

    两个指针不能进行加法运算,这是非法操作,因为进行加法后,得到的结果指向一个不知所向的地方,而且毫无意义。两个指针可以进行减法操作,但必须类型相同,一般用在数组方面,不多说了

    指针++”和“指针--”表示指针所指地址的下一个或前一个数据的地址

        指针的算术运算一般都是在操作数组的时候进行,因为只有声明数组才可以得到连续的内存空间。如果我们对一个单独的变量地址进行加或减的算术运算,然后改变新地址的值,则可能会破坏该地址的数据,所以在对指针进行算术运算时要明确运算的结果是程序中分配可用的地址。

        指针的关系运算说的是相同类型的指针之间的关系运算。不同类型的指针之间的关系运算没有任何意义,指针和非0整数的关系运算也没有任何意义,但是指针可以和0进行关系运算,两个相同类型的指针相等,表示这两个指针指向同一个地址。


    展开全文
  • 模糊关系合成运算的Matlab实现

    千次阅读 2020-03-23 21:03:55
    这里就不讲什么是模糊矩阵乘法了。百度上能搜到我这里就不赘述了,网上也有很多关于传递闭包解释,比较通俗易懂。我看到教材求传递闭包方法就是模糊矩阵反复自乘,当结果t(.R)不改变时候即为传递闭包...

    最近课程学到模糊数学,里面有关于模糊关系合成运算传递闭包的概念,十分不好理解,本来想手算几个例子来理解的,结果算到一半就烦了还十分容易算错,于是我就打算用matlab编写一个。

    这里就不讲什么是模糊关系合成运算了。百度上能搜到的我这里就不赘述了,网上也有很多关于传递闭包的解释,都比较通俗易懂。我看到教材求传递闭包的方法就是模糊矩阵反复自乘,当结果t(.R)不改变的时候即为传递闭包的值。

    那么首先要编程的就是如何算模糊关系合成运算,也有人称为模糊矩阵乘积,算法是“先取小后取大”。用max()函数,min()函数就能搞定,最后再根据矩阵运算规则。于是有

    function [R]=fuzzymm(A,B)
    %模糊矩阵合成运算的Matlab实现
    %运算规则,先"取小后取大"
    %输入必须为二阶矩阵A为m行n列, B为n行p列;
    [m,n]=size(A);[q,p]=size(B);%获得输入矩阵的维度信息
    if n~=q
        disp('第一个矩阵的列数和第二个矩阵的行数不相同!');
    else
        R=zeros(m,p);%初始化矩阵
    for k =1:m    
        for j=1:p
            temp=[];
            for i =1:n
                Min = min(A(k,i),B(i,j)); %求出第i对的最小值
                temp=[temp Min]; %将求出的最小值加入的数组中
            end
            R(k,j)=max(temp);
        end
    end
    end
    end
    

    我们来测试一下

    clc
    clear all;
    A=[0.3 0.7 0.2;1,0,0.4;0,0.5,1;0.6,0.7,0.8];
    B=[0.1,0.9;0.9,0.1;0.6,0.4];
    [R]=fuzzymm(A,B);
    disp(R)
    

    得到的结果

        0.7000    0.3000
        0.4000    0.9000
        0.6000    0.4000
        0.7000    0.6000
    

    结果正确!
    那么求传递闭包的只需将传入的矩阵设为相同就可以了!
    那么模糊相似矩阵的传递闭包怎么求呢,只需要反复调用函数,当结果不改变时,即为该模糊相似矩阵的传递闭包。
    例如:
    [1 0.1 0.8 0.5 0.3;
    0.1 1 0.1 0.2 0.4;
    0.8 0.1 1 0.3 0.1;
    0.5 0.2 0.3 1 0.6;
    0.3 0.4 0.1 0.6 1]

    clc
    clear all
    R=[1 0.1 0.8 0.5 0.3;0.1 1 0.1 0.2 0.4;0.8 0.1 1 0.3 0.1;0.5 0.2 0.3 1 0.6;0.3 0.4 0.1 0.6 1];
    [tR]=fuzzymm(R,R)
    

    于是有
    如图
    再次相乘
    如图
    再次相乘,发现结果不改变
    如图
    故求得传递闭包

    展开全文
  • 其实MPP架构的关系型数据库与Hadoop理论基础是极其相似都是运算分布到节点中独立运算后进行结果合并。个人觉得区别仅仅在于前者跑是SQL,后者底层处理则是MapReduce程序。 但是我们会经常听到对于MPP而...

    HADOOP与MPP是什么关系?有什么区别和联系?

    适用范围、应用领域分别是什么?

    其实MPP架构的关系型数据库与Hadoop的理论基础是极其相似的,都是将运算分布到节点中独立运算后进行结果合并。个人觉得区别仅仅在于前者跑的是SQL,后者底层处理则是MapReduce程序。

    但是我们会经常听到对于MPP而言,虽说是宣称也可以横向扩展Scale OUT,但是这种扩展一般是扩到100左右,而Hadoop一般可以扩展1000+,这也是经常被大家拿来区分这两种技术的一个说词。

    这是为什么呢?其实可以从CAP理论上来找到一些理由。因为MPP始终还是DB,一定要考虑C(Consistency),其次考虑 A(Availability),最后才在可能的情况下尽量做好P(Partition-tolerance)。而Hadoop就是为了并行处理和存储设计的,所有数据都是以文件存储,所以优先考虑的是P,然后是A,最后再考虑C。所以后者的可扩展性当然好于前者。

    以下几个方面制约了MPP数据库的扩展

    1、高可用:MPP DB是通过Hash计算来确定数据行所在的物理机器(而Hadoop无需此操作),对存储位置的不透明导致MPP的高可用很难办。

    2、并行任务:数据是按照Hash来切分了,但是任务没有。每个任务,无论大小都要到每个节点去走一圈。

    3、文件系统:数据切分了,但是文件数没有变少,每个表在每个节点上一定有一到多个文件。同样节点数越多,存储的表就越多,导致每个文件系统上有上万甚至十万多个文件。

    4、网络瓶颈:MPP强调对等的网络,点对点的连接也消耗了大量的网络带宽,限制了网络上的线性扩展(想象一台机器可能要给1000台机器发送信息)。更多的节点并没有提供更高的网络带宽,反而导致每个组节点间平均带宽降低。

    5、其他关系数据库的枷锁:比如锁、日志、权限、管理节点瓶颈等均限制了MPP规模的扩大。

    但是MPP数据库有对SQL的完整兼容和一些事务处理功能,对于用户来说,在实际的使用场景中,如果数据扩展需求不是特别大,需要的处理节点不多,数据都是结构化数据,习惯使用传统RDBMS的很多特性的场景,可以考虑MPP如Greenplum/Gbase等。

    但是如果有很多非结构化数据,或者数据量巨大,有需要扩展到成百上千个数据节点需求的,这个时候Hadoop是更好的选择。

    其实MPP架构的关系型数据库与Hadoop的理论基础是极其相似的,都是将运算分布到节点中独立运算后进行结果合并。个人觉得区别仅仅在于前者跑的是SQL,后者底层处理则是MapReduce程序。

    但是我们会经常听到对于MPP而言,虽说是宣称也可以横向扩展Scale OUT,但是这种扩展一般是扩到100左右,而Hadoop一般可以扩展1000+,这也是经常被大家拿来区分这两种技术的一个说词。

    这是为什么呢?其实可以从CAP理论上来找到一些理由。因为MPP始终还是DB,一定要考虑C(Consistency),其次考虑 A(Availability),最后才在可能的情况下尽量做好P(Partition-tolerance)。而Hadoop就是为了并行处理和存储设计的,所有数据都是以文件存储,所以优先考虑的是P,然后是A,最后再考虑C。所以后者的可扩展性当然好于前者。

    以下几个方面制约了MPP数据库的扩展

    1、高可用:MPP DB是通过Hash计算来确定数据行所在的物理机器(而Hadoop无需此操作),对存储位置的不透明导致MPP的高可用很难办。

    2、并行任务:数据是按照Hash来切分了,但是任务没有。每个任务,无论大小都要到每个节点去走一圈。

    3、文件系统:数据切分了,但是文件数没有变少,每个表在每个节点上一定有一到多个文件。同样节点数越多,存储的表就越多,导致每个文件系统上有上万甚至十万多个文件。

    4、网络瓶颈:MPP强调对等的网络,点对点的连接也消耗了大量的网络带宽,限制了网络上的线性扩展(想象一台机器可能要给1000台机器发送信息)。更多的节点并没有提供更高的网络带宽,反而导致每个组节点间平均带宽降低。

    5、其他关系数据库的枷锁:比如锁、日志、权限、管理节点瓶颈等均限制了MPP规模的扩大。

    但是MPP数据库有对SQL的完整兼容和一些事务处理功能,对于用户来说,在实际的使用场景中,如果数据扩展需求不是特别大,需要的处理节点不多,数据都是结构化数据,习惯使用传统RDBMS的很多特性的场景,可以考虑MPP如Greenplum/Gbase等。

    但是如果有很多非结构化数据,或者数据量巨大,有需要扩展到成百上千个数据节点需求的,这个时候Hadoop是更好的选择。

    展开全文
  • 关系,所有的都是结果才为真 或关系,至少有一个为真结果也为真 非关系,真为假,假为真 与关系的执行顺序,从头开始一直到有一个不成立就停止。 或关系会从头到尾去执行。 在决定某一事物结果的若干条件中,...
  • 一数据与数据类型 二C语言的基本数据类型及其表示 三C语言中的运算规则 四算术运算与赋值运算 五关系运算与逻辑运算 六其他运算 数据与数据类型 什么是数据 在程序中数据程序加工处理的对象也加工的结果 ...
  • 什么是计算机总线这个和计算机主机构造有关系,首先,我们知道计算机cpu由两个部分组成,一个控制单元,另一个算术逻辑单元,cpu控制单元负责计算机各个组件协调与沟通,什么是沟通?就是数据传输,...
  • 计算方法,只有当对应位置数据为1时,运算结果也为1,当HashMap容量2n次幂时,(n-1)2进制也就是1111111***111这样形式,这样与添加元素hash值进行位运算时,能够充分散列,使得添加元素均匀...
  • 算术运算符C语言基本算术运算符如下表:除法运算中注意:如果相除两个数都是整数话,则结果也为整数,小数部分省略,如8/3 = 2;而两数中有一个为小数(不分前后),结果则为小数,如:9.0/2 = 4.5...
  • 这个运算也比较常见的,对于参加的运算的元素,笛卡尔积与上面的三种基础运算不同的一点,它不要求两个运算的元素的列数相同,换句话说就是上面三种基础的集合运算要求表的列数相同。 下面关于对笛卡尔积...
  • 关于移位和乘除运算

    2019-09-26 10:17:39
    我们知道,最后a和b的结果相同,都是2 通常,在程序中,如果需要乘(或除)2n,我们都可以使用移位的方式来代替,在大部分的C编译器和单片机编程中,用移位的方法的代码比使用乘除运算得到的代码的效率高...
  • 从表面上看似乎有点像逻辑运算符,但逻辑运算符针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数位进行逻辑运算。下面详细介绍每个位运算符。 1.与运算符 与运算符用符号“&amp;amp;...
  • 从表面上看似乎有点像逻辑运算符,但逻辑运算符针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数位进行逻辑运算。下面详细介绍每个位运算符。  1.与运算符 与运算符用符号“&”表示,...
  • 算法中描述操作都是可以通过已经实现基本运算执行有限次来实现 输入:有零个或者多个输入,输入取决于某个特定对象集合。 输出:有一个或者多个输出,输出是和输入有着某种特定关系的量(强调输出与输入...
  • 这些数据在内存中占据不同大小储存空间,故用sizeof运算符(注:sizeof种运算符而不是函数,它在编译时发挥作用)进行运算结果是不同。然而不同类型指针在相同系统环境下进行这种运算结果相同。为...
  • 上一篇文章【了解什么是java,讲解变量和数据类型】 ...强调:字符串加任何数据类型都是字符串连接 3、赋值运算符 (1)通用形式: 变量名=表达式。 运算符 表达式 计算 结果(假设X=10) += X+=5 X=X+5 15 ‐
  • 而经过运算的范围在0-255之间的double型数据就被不正常得显示为白色图像了。  那么如何解决这个问题呢?笔者曾经用fix()函数把图像矩阵由实数形式转化成整数形式,但这样仍无法改变图像矩阵double型的事实。通过...
  • 你知道单片机、ARM、DSP都是CPU吗,它们之间又有什么不同,小编进行了整理和编辑。 CPU:中央处理器 CPU 包括运算逻辑部件、寄存器部件和控制部件等,其本质就是一个集成电路,实现功能就是从一个地方读出一个...
  •  书上面:一个自然数与另一个自然数(两个自然数处于有效运算范围之内)得出的结果是一个比任何与之相加的自然数要大的自然数。  我:???  老师:书上面的意思想表达 : 1+1=2 ——————————...

空空如也

空空如也

1 2 3 4 5 ... 17
收藏数 330
精华内容 132
关键字:

关系运算的结果都是什么