`

零扩展和符号位扩展

 
阅读更多

          符号扩展:当用更多的内存存储某一个有符号数时,由于符号位位于该数的第一位,扩展之后,符号位仍然需要位于第一位,所以,当扩展一个负数的时候需要将扩展的高位全赋为1.对于正数而言,符号扩展和零扩展是一样的,因为符号位就是0. 
           比如一个用一个8位二进制表示-1,则是10000001 
如果把这个书用16位二进制表示时,则为11111111 10000001 高位全都是1,这个叫做符号扩展,主要用于对其操作数。 

           零扩展就是全补零。不论其符号位是多少,高8位全都补0.

 

         在Java中负数是这样表示的:

            int型变量   -1   在java中是这样的:

 

System.out.printf("%x", -1);

//运行结果
ffffffff

 而

 

System.out.printf("%x", 1);
//运行结果:
1

 而:

 

System.out.printf("%x", -2);
//运行结果:
fffffffe

 结论:正整数的补码与原码相同。求负整数的补码,符号位不变,数值位各位取反,最后整个数加1。

        char无论转换成什么类型都执行零扩展。

        较窄整型转成较宽整形的时候执行符号扩展。对于正数而言,符号扩展和零扩展是一样的,因为符号位就是0. 

 

system.out.println((int)(char)(byte)-1);
//运行结果:
65535

 

解题思路:1.     int型的-1在内存中的表示为:0xffffffff

                   2.     转成byte型,将低8位保留变成: 0xff

                   3.     转成char型,窄向宽转,因为byte是有符号数则执行符号扩展变成: 0xffff

                   4.     转成int型,因为是char型转的所以执行零扩展变成: 0x0000ffff

                   5.     输出结果:65535

 

再看个例子:

 

system.out.println(Long.toHexString(0x100000000L + 0xcafebabe));

//运行结果:
cafebabe

 解题思路:

                   1.     这是一个混合运算,是long型数和int型数的加法操作

                   2.     首先将0xcafebabe转成long型数字,由于该数字的符号位(最高位)被置位了,所以它是一个负数。

                   3.     int型数转long型数是从窄到宽的转化,执行符号扩展,由于是负数,变成:0xffffffffcafebabe。

                   4.     执行加法操作:0xffffffffcafebabe + ox100000000=0x00000000cafebabe。

                   5.     输出结果:cafebabe。

分享到:
评论

相关推荐

    VHDL.zip_vhdl 符号扩展_vhdl位扩展_vhdl扩展位_vhdl有符号扩展_符号位扩展vhdl

    例如,在处理流水线设计、存储器接口或者ALU(算术逻辑单元)设计时,位扩展和符号扩展都会发挥重要作用。 通过阅读《VHDL.txt》这样的文档,你可以更深入地学习VHDL中的这些概念,获取具体的语法示例和实践指导。...

    Verilog实现4位(可扩展至任意位)带符号加法器_带上下溢出标志位

    3. **符号位处理**:由于我们处理的是带符号的数,需要特别考虑最高位的处理。如果最高位为1,那么这个数是负的,否则为正。在计算过程中,需要确保在最高位有正确的进位和借位。 4. **溢出检测**:检测溢出通常...

    编程中符号扩展

    2. 对于有符号整型数据,扩展时会在高位复制符号位(最高位),如果是负数则为1,正数则为0,其他位保持不变。 例如,一个8位的有符号整数`char b = -1`在内存中以补码形式表示为0xFF。当我们将其扩展为16位的整数`...

    逻辑运算与符号扩展指令演示

    如果原8位数的最高位(符号位)是1,那么扩展后的16位数的高8位也会被设置为1,表示负数;如果是0,则高8位清零,表示正数。例如,-12(1111 1100)扩展后是-12(1111 1111 1111 1100)。 2. **CWD(字到双字的带...

    php intl扩展文件

    - 对于Windows系统,根据系统的位数(32位或64位),intl扩展文件应放置在相应的系统目录下:64位系统放在`C:\Windows\SysWOW64`,32位系统放在`C:\Windows\System32`。 - 安装完成后,还需要在php.ini文件中启用...

    PHP mongodb扩展线程安全64位

    64位版本的PHP和扩展是为了在64位操作系统上运行而设计的,它们能够处理更大的内存地址空间和更高效的计算。64位PHP mongodb扩展允许处理大量数据和大型文档,同时利用现代64位硬件的性能优势。 **压缩包内容详解**...

    php7.2 redis扩展 64位

    1. **下载扩展**:从官方源或第三方仓库获取与PHP 7.2和系统架构(64位)相匹配的Redis扩展压缩包。 2. **解压到ext目录**:将压缩包解压,将`php_redis.dll`文件复制到PHP的`ext`目录下。通常,这个目录位于`php...

    ASCII码表及扩展ASCII码表

    美国信息交换标准代码)是一种基于拉丁字母的一套电脑编码系统,最初被设计为7位的编码,用于标准的128种符号(数字0-9、英文字母A-Z、a-z、以及32个特殊符号和一个空格)。随着计算机技术的发展,为了适应更多的...

    verilog符号数据处理

    ### Verilog符号数据处理 #### 一、符号数据与非符号数据的概念 在数字电路设计领域,特别是使用Verilog进行编程...通过合理地选择数据类型和进行适当的位扩展,可以有效地避免溢出等问题,并确保电路设计的正确性。

    redis php5.4扩展

    5. `-x86`:表示这个扩展适用于32位操作系统。 在提供的压缩文件中,我们有以下几个文件: 1. COPYING:通常包含软件的许可证信息,详细说明了如何合法地使用、分发和修改该软件。 2. CREDITS:列出为该项目做出...

    计算机组成原理源代码(程序计数器PC、多路选择器、符号位拓展、简单加法器).zip

    在计算机中,扩展符号位是为了保持数值的符号不变,尤其是在数据类型转换时。例如,从8位扩展到16位,如果原始数值的最高位(符号位)为1,则在扩展时所有新添加的位也填充为1,反之则填充为0。`SignExtTest.zip`...

    DataGridView扩展类(合计行)

    在开发过程中,我们经常需要对数据进行统计和汇总,例如计算某列的总和、平均值等,这时就需要扩展DataGridView的功能来实现“合计行”。这个"DataGridView扩展类(合计行)"的资源集合,可能是作者在多年系统软件项目...

    verilog实现32位无符号乘法器和带符号乘法器包含MULT、MULTU的

    在Verilog中,这可以通过扩展乘法器的输入宽度,例如将32位的输入扩展到33位(增加一个符号位),然后进行乘法运算,最后处理结果的符号位来实现。 在提供的v文件中,应该包含了这两个乘法器的Verilog代码,代码中...

    ASCII表 带字符表和扩展字符表

    最初的ASCII码是由7位二进制数组成,这128个字符包括了大小写英文字母、阿拉伯数字、标点符号及控制符等。 - **基本ASCII码范围**:0x00-0x7F,共计128个字符。 - **字符种类**:包括大小写英文字母(A-Z, a-z)、...

    ASCII打印表包括扩展字符

    扩展ASCII是为了满足更多语言和特殊符号的需求,通常使用8位编码,这样就能表示256个不同的字符。这扩展了ASCII的范围,加入了例如欧元符号、版权符号、注册商标符号等。扩展ASCII的不同版本根据不同的应用和地区...

    windows64位php-redis扩展

    【标题】"Windows 64位PHP-Redis扩展" 是专为在Windows操作系统上运行的64位PHP环境设计的一个关键组件。这个扩展使得PHP能够与Redis内存数据存储进行通信,从而实现高效的数据缓存和处理。Redis是一个开源的、基于...

    255个ASCII码 控制 字符 扩展

    扩展ASCII码的编码值从128到255,使用了8位二进制,其中高位为1,低位则是原始ASCII码的7位值。 在给定的压缩包文件中,我们可以看到三个图片文件,分别对应ASCII码的不同部分: 1. **ASCII1控制.jpg**:这个文件...

    php_memcache-3.0.8-5.5 32位dll扩展模块 download下载

    7. **README**:通常包含安装指南、配置说明和使用注意事项,是了解和安装扩展的重要参考资料。 在实际应用中,要安装这个扩展,你需要将`php_memcache.dll`添加到PHP的扩展目录,并更新`php.ini`配置文件,启用...

Global site tag (gtag.js) - Google Analytics