关于操作符运算问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于操作符运算问题相关的知识,希望对你有一定的参考价值。

逻辑操作符NOT是按位取反运算,可是有个例题,我看不懂。
MOV AH, NOT 0F0H ;OFH->AH
怎么会是0F呢,OFOH 按位取反应该是F0把,怎么会注释说是OF呢?

0F0H就是F0H,前面的那个“0”是为了避免字母与数字混淆加上去的(约定:书写时在最高位为字母的十六进制数前加一个0),因为十六进制数和十进制数一样,最高位加“0”不会影响数的大小,无实际意义。所以0F0H取反就是F0H,而F0H取反结果就是0FH。 参考技术A 0F0H就是F0H,汇编语言规定十六进制数第一个数字不能是字母,若是字母,前面要加一个“0”。否则,编译器会把这个十六进制数当作标号来处理。 参考技术B 不是啊 本来是f0 取反变成f 没错啊 之所以前面加个0是编译器规定 十六进制数第一个数字不能是字母本回答被提问者采纳 参考技术C 按位取反是按二进制算的

关于Java运算中类型自动提升的问题

1.表达式中的自动类型提升:

表达式求值时,Java自动的隐含的将每个byte、short或char操作数提升为int类型,这些类型的包装类型也是可以的。

例如:short s1 = 1;

      s1 = s1 + 1;

s1+1运算中的操作数s1会被自动提升为int类型,s1+1运算结果会成为int类型,再赋值给short类型的s1时,编译器会报告需要强制转换类型的错误。需要改为short s1=1; s1=(short)(s1+1);结果就是short类型。

例如:short s1 = 1; 

      s1 += 1;

+=是java语言中的运算符,Java编译器会对它特殊处理进行正确的编译。

2.类型提升规则:

byte、short和char类型的值都被提升为int类型;

如果有一个操作数是long类型,就将整个表达式提升为long类型;

如果有一个操作数是float类型,就将整个表达式提升为float类型;

如果任何一个操作数为double类型,结果将为double类型。

例如:

byte b=1;

char c=‘a‘;

short s=1024;

int i=50;

float f=2.0f;

double d=.123;

double result = (f * b) + (i / c) - (d * s); 

f*b中,b被自动提升为float类型,该表达式结果是float类型;

i/c中,c被自动提升为int类型,该表达式结果是int类型;

d*s中,s被自动提升为doubl类型,该表达式结果是double类型;

最后,float+int-double,结果会被提升为double类型,double类型为最后结果result的类型。

3、测试一个int类型数据与float数据运算后,测试结果是什么类型

public class Test {
    public void test(float f) {
        System.out.println("float");
    }
 
    public void test(double d) {
        System.out.println("double");
    }
 
    public void test(int i) {
        System.out.println("int");
    }
 
    public static void main(String[] args) {
        Test t = new Test();
        int i = 10;
        float f = 10f;
        t.test(f * i);
    }
}

最后结果显示为float类型

 

以上是关于关于操作符运算问题的主要内容,如果未能解决你的问题,请参考以下文章

关于java按位操作运算

关于哪些操作索引效果不佳或未使用

关于操作运算符的一些小练习

MZOJ #83 位运算

4个你傻傻分不清楚的关于 ?的 Javascript 运算符

4个你傻傻分不清楚的关于 ?的 Javascript 运算符