Unintended sign extension

符号扩展包括:

  1. Integral promotion

    charshort, enumerated type, or bit-field, whether signed or unsigned, can be used in any expression that calls for an int. If an int can hold all possible values of the original type, the value is converted to an int. Otherwise, it is converted to an unsigned int.

  2. Conversion between signed and unsigned integers

    When a negative signed integer is promoted to an unsigned integer of the same or larger type, it is first promoted to the signed equivalent of the larger type, then converted to the unsigned value.

修复方法:强转

To fix unintended sign extension problems, you must use explicit casting to achieve the intended results.

关于“无意的符号扩展”,这里有篇文章讲的很详细

http://docs.oracle.com/cd/E19253-01/816-5138/convert-2/index.html

时间: 2024-10-10 16:30:02

Unintended sign extension的相关文章

【APUE】Chapter17 Advanced IPC & sign extension & 结构体内存对齐

17.1 Introduction 这一章主要讲了UNIX Domain Sockets这样的进程间通讯方式,并列举了具体的几个例子. 17.2 UNIX Domain Sockets 这是一种特殊socket类型,主要用于高效的IPC,特点主要在于高效(因为省去了很多与数据无关的格式的要求). int socketpair(int domain, int type, int protocol, int sockfd[2]) 这个函数用于构建一对unix domain sockets:并且与之前

>> 关于计算机有符号数的符号拓展(sign extension)问题

这里首先阐述相关规律, 情况为将位数较少的有符号存储空间中取出数据并放入更大有符号存储空间, 如: char → short . 规律: 将原空间符号位重复填充至新空间剩余位.  eg.(负数情况, 正数同理) char:   1000 0000        → short:  1111 1111 1000 0000 -----------------------------------------------------------------------------------------

49th--Expanding-the Bit-Representation-of-a-Number

关于C中的类型转换 对于C中的类型转换一直停留在<C和指针>中的那张类型提升表中,其中给出了类型的提升顺序,也就是说如果一个表达式中同时出现了int和short,short类型的变量会自动提升为int.但是对其中的具体缘由,从来没有去详细的想过,之前看书比较粗糙,没有细读一本书,理解了整体的意思就觉得自己真的理解的作者的意图,最近在coursera上看<史记>的开放课程的时候老师讲到一个看怎样读经书的方法,讲到一篇经典的文章的时候,都会去揣测每一个字的含义,以及为什么要用这个字并且

移位运算符(JAVA)

java中有三种移位运算符 <<      :     左移运算符,num << 1,相当于num乘以2 >>     :     右移运算符,num >> 1,相当于num除以2 >>>    :     无符号右移,忽略符号位,空位都以0补齐 1. 左移运算符 左移运算符<<使指定值的所有位都左移规定的次数.1)它的通用格式如下所示:value << numnum 指定要移位值value 移动的位数.左移的规则只

C++ 中注意,零扩展和符号位扩展

版权声明:本文为博主原创文章,未经博主允许不得转载. 首先,介绍一下两种扩展的定义 转 http://blog.csdn.net/jaylong35/article/details/6160736 符号扩展:当用更多的内存存储某一个有符号数时,由于符号位位于该数的第一位,扩展之后,符号位仍然需要位于第一位,所以,当扩展一个负数的时候需要将扩展的高位全赋为1.对于正数而言,符号扩展和零扩展是一样的,因为符号位就是0. 比如一个用一个8位二进制表示-1,则是10000001 如果把这个书用16位二进

第三节 信息的表示和处理

第三节 信息的表示和处理 一.   信息存储 1. 字节 最小的可寻址的存储器单位,每个字节由唯一的数字来标识,称为地址. 2. 进制的表示和转化 ①  十进制转二进制方法为:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除2,依此步骤继续向下运算直到商为0为止. ②  二进制转十进制方法为:把二进制数按权展开.相加即得十进制数. ③  二进制转八进制方法为:3位二进制数按权展开相加得到1位八进制数.(注意事项,3位二进制转成八进制是从右到左开始转换,不足时补0). ④ 

YASM User Manual

This document is the user manual for the Yasm assembler. It is intended as both an introduction and a general-purpose reference for all Yasm users. 1.?Introduction Yasm is a BSD-licensed assembler that is designed from the ground up to allow for mult

java移位运算符详解[转]

java移位运算符不外乎就这三种:<<(左移).>>(带符号右移)和>>>(无符号右移). 1. 左移运算符 左移运算符<<使指定值的所有位都左移规定的次数. 1)它的通用格式如下所示: value << num num 指定要移位值value 移动的位数. 左移的规则只记住一点:丢弃最高位,0补最低位 如果移动的位数超过了该类型的最大位数,那么编译器会对移动的位数取模.如对int型移动33位,实际上只移动了332=1位. 2)运算规则 按

内存管理--程序在内存中的分布

在多任务操作系统中的每一个进程都运行在一个属于它自己的内存沙盘中.这个沙盘就是虚拟地址空间(virtual address space). 1 32位虚拟内存布局 在32位模式下虚拟地址空间总是一个4GB的内存地址块.这些虚拟地址通过页表(page table)映射到物理内存,页表由操作系统维护并被处理器引用.每一个进程拥有一套属于它自己的页表,但是还有一个隐情.只要虚拟地址被使用,那么它就会作用于这台机器上运行的所有软件,包括内核本身.因此一部分虚拟地址必须保留给内核使用: 图 1 这并不意味