精华内容
下载资源
问答
  • 变量a是一个64位有符号的整数,初始用16进制表示为:0x7FFFFFFFFFFFFFFF;变量b是一个64位有符号的整数,初始用16进制表示为:0x8000000000000000;则a+b结果用10进制表示为多少? 答案是: -1 ; 解析 1、a+b...

    变量a是一个64位有符号的整数,初始值用16进制表示为:0x7FFFFFFFFFFFFFFF;变量b是一个64位有符号的整数,初始值用16进制表示为:0x8000000000000000;则a+b的结果用10进制表示为多少?

    答案是: -1 ;
    解析
    1、a+b的16进制表示为
    0xFFFF FFFF FFFF FFFF ;(16位F),转为二进制为64个1
    2、有符号数:是针对二进制来讲得。用最高位作为符号位,0 代表 + ;1 代表 - ;所以a+b的结果是负数;
    3、计算机中负数是以补码的形式保存的,将补码转换成原码的计算方法:
    ----(1)、对于正数,原码与补码相同
    ----(2)、对于负数,将补码除符号位之外,按位取反,末位加 1 ,即得原码。
    4、a+b=1111…111 (64位1)
    取反 : 100…000 (后面63位0)
    加1 : 100…0001 (中间62位0,最后一位是1)
    结果: 10进制 = -1 ;

    展开全文
  • 1、通过第三方变量实现两个变量的交换:2、通过已有两个变量之间加或减实现:这种方法对于两个都是无限接...地址和一个整数相加即“a+10”表示以a为基地址在a后10个a类数据单元地址。所以理论上可以通过和算...

    1、通过第三方变量实现两个变量的交换:

    3322099c8e54b83912ccab25ce10adc3.png

    2、通过已有的两个变量之间的加或减实现:

    a4119eb78d46fa7cfdb650289fb82192.png

    这种方法对于两个都是无限接进int取值范围,而相加超出int取值范围的情况不适用。

    3. 指针地址操作

    因为对地址的操作实际上进行的是整数运算,比如:两个地址相减得到一个整数,表示两个变量在内存中的储存位置隔了多少个字节;地址和一个整数相加即“a+10”表示以a为基地址的在a后10个a类数据单元的地址。所以理论上可以通过和算术算法类似的运算来完成地址的交换,从而达到交换变量的目的。即:

    int *a,*b; //假设

    *a=new int(10);

    *b=new int(20); //&a=0x00001000h,&b=0x00001200h

    a=(int*)(b-a); //&a=0x00000200h,&b=0x00001200h

    b=(int*)(b-a); //&a=0x00000200h,&b=0x00001000h

    a=(int*)(b+int(a)); //&a=0x00001200h,&b=0x00001000h

    通过以上运算a、b的地址真的已经完成了交换,且a指向了原先b指向的值,b指向原先a指向的值了吗?上面的代码可以通过编译,但是执行结果却令人匪夷所思!原因何在?

    首先必须了解,操作系统把内存分为几个区域:系统代码/数据区、应用程序代码/数据区、堆栈区、全局数据区等等。在编译源程序时,常量、全局变量等都放入全局数据区,局部变量、动态变量则放入堆栈区。这样当算法执行到“a=(int*)(b-a)”时,a的值并不是0x00000200h,而是要加上变量a所在内存区的基地址,实际的结果是:0x008f0200h,其中0x008f即为基地址,0200即为a在该内存区的位移。它是由编译器自动添加的。因此导致以后的地址计算均不正确,使得a,b指向所在区的其他内存单元。再次,地址运算不能出现负数,即当a的地址大于b的地址时,b-a<0,系统自动采用补码的形式表示负的位移,由此会产生错误,导致与前面同样的结果。

    有办法解决吗?当然!以下是改进的算法:

    if(a

    {

    a=(int*)(b-a);

    b=(int*)(b-(int(a)&0x0000ffff));

    a=(int*)(b+(int(a)&0x0000ffff));

    }

    else

    {

    b=(int*)(a-b);

    a=(int*)(a-(int(b)&0x0000ffff));

    b=(int*)(a+(int(b)&0x0000ffff));

    }

    算法做的最大改进就是采用位运算中的与运算“int(a)&0x0000ffff”,因为地址中高16位为段地址,后16位为位移地址,将它和0x0000ffff进行与运算后,段地址被屏蔽,只保留位移地址。这样就原始算法吻合,从而得到正确的结果。

    此算法同样没有使用第三变量就完成了值的交换,与算术算法比较它显得不好理解,但是它有它的优点即在交换很大的数据类型时,它的执行速度比算术算法快。因为它交换的时地址,而变量值在内存中是没有移动过的。(以下称为地址算法)

    4、通过异或实现(异或符号为^)

    *******************************************************************************************************

    关于^:

    异或的运算法则,相当于不带进位的二进制加法。二进制下用1表示真,0表示假,则异或的运算法则为:0异或0=0,1异或0=1,0异或1=1,1异或1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位。

    第一个数

    符号

    第二个数

    结果

    0

    ^

    0

    0

    0

    ^

    1

    1

    1

    ^

    0

    1

    1

    ^

    1

    0

    如:

    num1 = 5,对应的二进制为(101); num2 = 7,对应的二进制为(111);

    num1=num1^num2=2; 即二的平方位1^1=0,二的一次方位0^1=1,二的0次方位1^1=0;得到(010)即为2。

    num2 = num1 ^ num2=5 ;相当于num2=num1^num2^num2;二的平方位1^1^1=1(此处无论num2的二的平方位是0还是1,异或运算后都为0,故得到的肯定与原num1的二的平方位相同,同理其他位置全部也都是原num1的数);二的一次方位0^1^1=0;二的0次方位1^1^1=1.;得到(101)即为5.

    num1 = num1^num2=7; 相当于num1 = num1^num2^num1^num2^num2=num2=7.

    此方法同样实现了两个数互换。

    *******************************************************************************************************

    b5fee53afddd2d6eb962b1c505ae352d.png

    由于^符号是不进位的,所以即使两个都无限接进int取值范围的数。通过^运算,也不会超过int取值范围。

    展开全文
  • 1、通过第三方变量实现两...3. 指针地址操作因为对地址操作实际上进行整数运算,比如:两个地址相减得到一个整数表示两个变量在内存中储存位置隔了多少个字节;地址和一个整数相加即“a+10”表示以a为基地...

    1、通过第三方变量实现两个变量的交换:

            

     

    2、通过已有的两个变量之间的加或减实现:

            

    这种方法对于两个都是无限接进int取值范围,而相加超出int取值范围的情况不适用。

    3. 指针地址操作
    因为对地址的操作实际上进行的是整数运算,比如:两个地址相减得到一个整数,表示两个变量在内存中的储存位置隔了多少个字节;地址和一个整数相加即“a+10”表示以a为基地址的在a后10个a类数据单元的地址。所以理论上可以通过和算术算法类似的运算来完成地址的交换,从而达到交换变量的目的。即:
    int *a,*b; //假设
    *a=new int(10);
    *b=new int(20); //&a=0x00001000h,&b=0x00001200h
    a=(int*)(b-a); //&a=0x00000200h,&b=0x00001200h
    b=(int*)(b-a); //&a=0x00000200h,&b=0x00001000h
    a=(int*)(b+int(a)); //&a=0x00001200h,&b=0x00001000h
    通过以上运算a、b的地址真的已经完成了交换,且a指向了原先b指向的值,b指向原先a指向的值了吗?上面的代码可以通过编译,但是执行结果却令人匪夷所思!原因何在?
    首先必须了解,操作系统把内存分为几个区域:系统代码/数据区、应用程序代码/数据区、堆栈区、全局数据区等等。在编译源程序时,常量、全局变量等都放入全局数据区,局部变量、动态变量则放入堆栈区。这样当算法执行到“a=(int*)(b-a)”时,a的值并不是0x00000200h,而是要加上变量a所在内存区的基地址,实际的结果是:0x008f0200h,其中0x008f即为基地址,0200即为a在该内存区的位移。它是由编译器自动添加的。因此导致以后的地址计算均不正确,使得a,b指向所在区的其他内存单元。再次,地址运算不能出现负数,即当a的地址大于b的地址时,b-a<0,系统自动采用补码的形式表示负的位移,由此会产生错误,导致与前面同样的结果。
    有办法解决吗?当然!以下是改进的算法:
    if(a<b)
    {
    a=(int*)(b-a);
    b=(int*)(b-(int(a)&0x0000ffff));
    a=(int*)(b+(int(a)&0x0000ffff));
    }
    else
    {
    b=(int*)(a-b);
    a=(int*)(a-(int(b)&0x0000ffff));
    b=(int*)(a+(int(b)&0x0000ffff));
    }
    算法做的最大改进就是采用位运算中的与运算“int(a)&0x0000ffff”,因为地址中高16位为段地址,后16位为位移地址,将它和0x0000ffff进行与运算后,段地址被屏蔽,只保留位移地址。这样就原始算法吻合,从而得到正确的结果。
    此算法同样没有使用第三变量就完成了值的交换,与算术算法比较它显得不好理解,但是它有它的优点即在交换很大的数据类型时,它的执行速度比算术算法快。因为它交换的时地址,而变量值在内存中是没有移动过的。(以下称为地址算法)

    4、通过异或实现(异或符号为^)

    *******************************************************************************************************

    关于^:

         异或的运算法则,相当于不带进位的二进制加法。二进制下用1表示真,0表示假,则异或的运算法则为:0异或0=0,1异或0=1,0异或1=1,1异或1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位。

    第一个数 符号 第二个数 结果
    0 ^ 0 0
    0 ^ 1 1
    1 ^ 0 1
    1 ^ 1 0

    如:

    num1 = 5,对应的二进制为(101); num2 = 7,对应的二进制为(111);

    num1=num1^num2=2; 即二的平方位1^1=0,二的一次方位0^1=1,二的0次方位1^1=0;得到(010)即为2。

    num2 = num1 ^ num2=5 ;相当于num2=num1^num2^num2;二的平方位1^1^1=1(此处无论num2的二的平方位是0还是1,异或运算后都为0,故得到的肯定与原num1的二的平方位相同,同理其他位置全部也都是原num1的数);二的一次方位0^1^1=0;二的0次方位1^1^1=1.;得到(101)即为5.

    num1 = num1^num2=7; 相当于num1 = num1^num2^num1^num2^num2=num2=7.

    此方法同样实现了两个数互换。

    *******************************************************************************************************    

    由于^符号是不进位的,所以即使两个都无限接进int取值范围的数。通过^运算,也不会超过int取值范围。 

     

    转载于:https://www.cnblogs.com/Rachelcr7/p/6671067.html

    展开全文
  • 1、常量:在运行过程中,其不能被改变量称为常量。 (1)整型常量,即数学中的整数。 (2)实型常量。(可理解为带有小数点,0.0也算。) ①十进制小数形式,由数字和小数点组成,与数学中一致。 ②指数形式...

    一、常量和变量

    1、常量:在运行过程中,其值不能被改变的量称为常量。

    (1)整型常量,即数学中的整数。

    (2)实型常量。(可理解为带有小数点,0.0也算。)

    ①十进制小数形式,由数字和小数点组成,与数学中一致。

    ②指数形式。如1.2e3  ( = 1.2×10^3 )。

    • 规定以字母e或E代表以十为底的指数。
    • e或者E之前必须有数字,之后必须为整数。错误示例:E2,3E2.1

    (3)字符常量。有两种形式的字符常量,一种是普通字符(用单撇号括起来的一个字符,‘A’),另一种是转义字符(以字符‘\’开头,见下表)。

    字符常量存储在计算机的单元中,并不是存储字符本身,而是以其代码存储的,一般是ASCII码。

    (4)字符串常量。

    用双撇号把若干字符括起来。字符串常量是双撇号中的全部字符,但不包括双撇号本身。

    (5)符号常量。

    用一个符号名代表一个常量的,为符号常量,如下文中的PI。含义清楚,一改全改。

    #define PI 3.1416    / / 行末没有分号

    PS : 要注意区分符号常量和变量,不要把符号常量误认为变量。符号常量不占内存,只是一个临时符号。在预编译后,这个符号就不存在了。故不能对符号常量赋新值。为与变量名相区别,习惯上符号常量用大写表示。

    2、变量:代表一个有名字的、具有特定属性的存储单元,用来存放数据,存放变量的值。

    先定义——指定名字和类型,后使用

    例如

    int a;

    a=3.9;

    3*、常变量:C99使用,在定义变量前加关键字const

    常变量具有变量的属性,只是存在期间值不能改变。

    4、标识符:在计算机高级语言中,用来对变量、符号常量名、函数、数组、类型等命名的有效字符序列。

    简单的说,标识符就是一个对象的名字。变量名、符号常量名、函数名都是标识符。

    C语言规定标识符只能由字母,数字和下划线三种字符。且第一个字符必须为字母或下划线。

    二、数据类型

    1、整型数据

    基本整型 int (4个字节)——字节数由具体的C编译系统决定,这里以Visual C++为例

    短整型 short int (2个字节)

    长整型 long int (4个字节)

    双长整型 long long int (8个)

    2、字符型数据

    char 可以把0~127之间的整数赋值给一个字符变量,在输出时可以选择十进制整数%d或者%c字符形式输出。

    1个字节

    3、浮点型数据

    float 单精度浮点型 4个字节

    double 双精度浮点型 8个字节

    long double型 长双精度

     

    展开全文
  • JavaScript中非常重要数据类型是对象和数组。 JavaScript标识符必须字母、下划线(_)或美元符($)开始,后续字符可以是字母、数字、下划线...JavaScript不区分整数值和浮点数值,所有数字均用浮点数表示。当一
  • 类型,变量

    2018-09-05 15:38:23
    在js中一般是10进制整型直接量,但是同时也含有16进制和8进制整型直接量,16进制是0x或者0X开头,而8进制的以0开头,但是现在在js严格模式下面话8进制被明确禁止了。 浮点型直接量 采用是传统...
  • 第二章类型、变量  Javascript的数据类型分为两类:原始数据类型(数字、字符串、布尔和两个特殊的原始:null和undefine)和对象类型(是属性的集合,一...能表示的整数范围为:-2的53次方到2的53次方,包含边
  • 变量的存储深入

    千次阅读 2011-10-19 15:40:45
    变量值的存储 变量被定义以后,系统在运行时会为该变量分配一个相应大小存储空间,称为存储单元。 给变量赋值后,该变量对应存储单元中会存放该值,这个值称为变量值。 那么变量值在变量存储单元中是...
  • 常量 常量是指在程序执行过程中其不能改变量。在C51中支持整型常量、浮点型常量、字符型常量和字符串型常量。 一.... 整型常量也就是整型...0x开头表示,如0x12表示十六进制数12H。 长整数。在C51中当一个...
  • 变量2

    2019-12-08 12:16:46
    每个变量都有一个名称,可以用该名称表示内存这个位置,提取它包含数据或存储一个新数值. 程序里变量的数量是没有限制.在程序执行过程中,每个变量包含的值由程序指令来决定.变量的值不是固定,而是可以...
  • JavaScript不区分整数值和浮点数值。JavaScript中所有数字均用浮点数值表示。JavaScript采用IEEE 754标准定义64位浮点格式表示数字。整型直接量:十六进制数直接量是“0x”或“0X”为前缀,其后紧跟随十六...
  • 1、JavaScript不区分整数值和浮点数值。JavaScript中所有数字均用浮点数值表示。由于某些JavaScript实现支持八进制直接量,而有些不支持,因此最好不要使用0为前缀整型直接量。在ECMAScript6严格模式下,...
  • Python中的变量 什么是变量 变量是内存中的一个地址,用一个固定的字符串表示这个地址,这个字符串就是变量,对象赋值实际上是对象的引用 变量的命名 变量由字母,数字,下划线组成,不能数字开头 Pyhton中,变量...
  • 第三章:类型、变量 JavaScript是一门弱类型语言,其变量是无类型,可以被赋予任意类型的值,可以自由地进行数据转换而无需显式声明。 3.1 数字 ...十六进制的整数直接量‘0x’或‘0X...
  • Shell变量

    2019-05-03 20:47:00
    变量来源于数学,是计算机语言中能存储计算结果或能表示值的抽象概念。变量可以通过变量名来访问。 (1).shell变量的设置规则  1.变量名通常由大小写字母、数字和下划线(_)组成,但不能数字开头  2.通过等号...
  • 常量是一样,只是它们的值不能自己定义后进行修改常规变量处理。 整型常量 一个整数文字可以是十进制,八进制,或十六进制常数。前缀指定基或基数:0x或0X十六进制,0表示八进制,并没有为十进制。 一个整数文字也...
  • 命名规则:类:大写字母开头单数名词作为名字,例如用Data,而不用data...如果,函数唯一目的是返回一个,那么函数名可以是一个描述返回值名词。如sqrt()。变量名:即标识对象名字应该是一个小写名词,...
  • 1.2.3java中的变量运算

    2020-06-30 16:31:19
    变量运算分为四种: ...(5)移位运算:将二进制表示的整数进行左右移动,使之发生变化。对byte和short类型进行位移时,会先将其转化为int 再位移 (6)位运算:位运算是按位进行与(‘&’
  • Java 基本数据类型 变量就是申请内存来存储。也就是说,当创建变量的时候,需要在内存中申请空间。内存管理系统根据变量的类型为变量分配存储空间,...byte 数据类型是8位、有符号的,二进制补码表示的整数; 最
  • 具体要求是字符序列形式从终端输入语法正确、不含变量的整数表达式,并利用给定优先关系实现对算术四则混合表达式,并演示在求过程中运算符栈,操作数栈,输入字符和主要操作变化过程。要把一个...
  • 变量

    2020-06-13 19:57:40
    变量二 一、字面值 创建一个Hero对象会用到new关键字,但是给一个基本类型变量赋值却不会用到new. 因为基本类型是Java语言里一种内置特殊数据类型,并不是某一个类...整数的字面值可以用下面四种进制来表示: 十
  • 在Erlang中,所有变量都用"="语句绑定。所有变量都需要大写字母开头。在其他编程语言中,"="符号用于分配,...Erlang以下基本变量在最后一章中有所描述 -数字- 用于表示整数或浮点数。一个例子是10。Boolean- 这...
  • Erlang - 变量在Erlang中,所有变量都与'='语句绑定。 所有变量都需要大写字符开头。 在其他编程语言中,'='符号用于赋值,但不用于...Erlang中以下基本变量在最后一章中进行了解释 -Numbers - 用于表示整数...
  • 变量(1)在计算机程序中,变量不仅可以是数字,还可以是任意数据类型,变量子啊程序中就是一个变量表示的,变量名必须是大小写英文,数字,和"_"的组合,切不能数字开头.a = 1 #变量a是一个整数1b = "shuai" #变量b是一...
  • 在十进制中,在小数点右边数字关联了10负乘方:不必惊讶,二进制也是同样方法表示:这个办法与第一章中整形办法相结合就可以用来转换一个一般数值:将十进制转换成二进制也不是很难。一般来说,需将十...
  • 基于前一章讲解的基本类型,有以下几种基本的变量类型: 类型 描述 char 通常是一个八位字节(一个字节)。这是一个整数类型。 int 对机器而言,整数的最自然的大小。 float 单精度浮点。 double 双...
  • byte 数据类型是8位、有符号的,二进制补码表示的整数; 最小值是 -128(-2^7); 最大值是 127(2^7-1); 默认值是 0; byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 ...
  • python中数据类型:整数、浮点数、字符串、布尔、空值 1、整数:Python可以处理任意大小的整数,当然包括负整数 普通整数:1,100,-8080,0 十六进制数:0xff00,0xa5b4c3d2 在数字中间_分隔数:10_000_...
  • python中变量存储机制

    2019-10-02 21:28:57
    1、python的变量其实是一种堆内存的引用,可以理解为一个实体的标签,而在不同变量之间的拷贝复制(如a=b),他们所表示的对象实体是同一个。 2、-5到256之间的整数的内存地址是固定的(闭区间),并不会因为被赋值给一个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 554
精华内容 221
关键字:

以整数表示的变量值是