关于c++short转换double问题

short sn = 0x0101; //257
int in1 = 0x01010000;
int in2 = 0x00000101;
float fn1 = *(float *)&sn;
float fn2 = *(float *)&in1;
float fn3 = *(float *)&in2;
cout << (fn1 == fn2 ? 1 : 0) << " " << (fn1 == fn3 ? 1 : 0);
上述代码输出为0 0,说明在内存中float不是直接取short作为头部或尾部
实际内存中的值发生了什么变化?
如果short为负数呢?

2个回答

希望楼主再跑趟代码试试。。。fn1和fn3明显是相等的啊。。。

qq_36685766
qq_36685766 运行过来,vs2015运行结果就是0 0,也就是不等
接近 3 年之前 回复

十六位和六十四位能一样么?会有缺省位补充

qq_36685766
qq_36685766 float是32位吧,这个就是关于如何补充的问题
接近 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
short 和byte 转换问题
public class Test3rnrn public static void main(String[] args)rn rn short s = 0x00FD;rn rn byte b = (byte) s;rn rn rn System.out.println(b);rn rnrn
C语言double 型数组转short
举个例子如下,为什么程序无法运行。rn#include "stdio.h"rn#include "stdlib.h"rnrnint main()rnrn int i,j;rn short *T;rn double **X;rn X = (double **)malloc( sizeof(double*) * 10000); rn for(i=0;i<10000;i++)rn rn for(j=0;j<2;j++)rn rn X[i][j] = -0.003+0.2*(j+1);rn rn rn T = (short *)malloc( sizeof(short) * 10000); rn for(i=0;i<10000;i++)rn rn T[i] = (short)(X[i][0]*3000);rn rn rn for(i=0;i<10000;i++)rn rn printf("%d", T[i]);rn printf("\n");rn rn rn free(X);rn X=NULL;rn free(T);rn T=NULL;rn rn return 0;rn rnrn
关于float 和double的转换
1、C是不是把floating point常量读成double?rn2、C把float传给printf是不是将其转换成double?
初学者关于int转换char和short的问题?
[code=Java]rnpublic static void main(String[] args)rn rn int i = 32769 ;rn int k = 433 ;rn byte b = (byte)i ;rn char c = (char)k ;rn System.out.println(b) ;rn System.out.println(c) ;rn rn[/code]rn请问byte b为什么是1,具体是怎样转换的?char c输出为什么是个问号?请各位前辈解释清楚一点,谢谢
double和Double转换
double[]和Double[]除了用循环,有没有其它办法,将Double[]中的数据插入到double[]中
double和float转换的问题
这是一个一分钱引发的血案。案情现场还原 float f = 280.8f; System.out.println(f*100); 结果是什么? 结果是:28080.0f(我是这么想的) 实际结果是:28079.998 既然float处理有问题换double会不会有问题呢? double f = 280.8d; System.out.println(f*100); 结果是:
double到long的转换问题!
看一道被不少人转载的文章: 我截取片段如下:rnrn[code=Java] if(amount > 99999999999999.99 || amount < -99999999999999.99)rn throw new IllegalArgumentException("参数值超出允许范围 (-99999999999999.99 ~ 99999999999999.99)!");rnrn boolean negative = false;rn if(amount < 0) rn negative = true;rn amount = amount * (-1);rn rnrn long temp = Math.round(amount * 100);rn int numFen = (int)(temp % 10); // 分rn temp = temp / 10;rn int numJiao = (int)(temp % 10); //角rn temp = temp / 10;rn //temp 目前是金额的整数部分rnrnrn本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/liguohuaty/archive/2009/07/06/4326572.aspx[/code]rnrnrn当amount = 99999999999999.99 时候 采用Math.round(amount * 100) 只能得到9999999999999998rn 99 9999 9999 9999.99 变成了rn 9999 9999 9999 9998rnrn也就是说在转换过程中丢失了精度 继续下面的测试:rn[code=Java] System.out.println(Math.round(99999999999999.99));//100000000000000rn System.out.println(Math.round(99999999999999.99*100));//9999999999999998rn System.out.println((long)99999999999999.99*100);//9999999999999900[/code]rnrn即使我用 strictfp 关键字申明 也无法得到高精度的计算?? 还是理解有误rnrn精确取得该数据还有几种方法? 现在的我只能通过转换成char数组再以分析.的位置来判断整数与小数部分.rnrn请大家帮忙.谢谢!^_^
string 转换 double的问题
string a;rndouble b;rnrn如果a不为空字符串的时候我们可以使用 b=double.parse(a) 来实现转换,但是a还有等于空字符串的时候,所以使用rnif (a!="")rnrn b=double.parse(a);rnrnrn怎么样可以不判断a是否为空字符串直接转换啊?
double 与 string 的转换问题:
double d = 123.0;rnstring s = d.ToString();rn//s = "123";rn//如何才能使s="123.0"?
double转换decimal问题
我是个ASP.NET的初学着,如果问的很白痴,不要拿扳砖拍我啊rnrn问题如下:rn===========================================================================rn long Number1=1;rn long Number2=3;rn decimal Number3=(decimal)Number1/Number2;rn---------------------------------------------------------------------------rn double Number7=1;rn double Number8=3;rn decimal Number9 =(decimal)Number7/(decimal)Number8;rn---------------------------------------------------------------------------rn decimal Number4=1;rn decimal Number5=3;rn double Number6 =(double)Number4/Number5;rn---------------------------------------------------------------------------rn double Number7=1;rn double Number8=3;rn decimal Number9 =(decimal)Number7/Number8;rnrn===========================================================================rn为什么前面两段代码是正确的,后面两段却都是错误的.那个高人给我解释下吗?
String->double的转换问题
我现在有一个String型的数据a=120.25473154602059rn要将它转换成double型的怎么转换?rn使用Double.parseDouble(a);会得到rn120.2547315460206 怎么办?????
variant_t转换 double 问题.
用VC 以ADO方式从SQL中提取jwv1字段值,字段类型为numeric,现在问题是提取的值保留在variant_t变量类型中,variant_t转换为DOUBLE类型该怎么转换?我尝试了一种方法 rnm_v1.ChangeType(VT_R8,NULL);rnjwv1=V_R8(&m_v1);rn出错,提示精度无效。rn请教高手,谢谢.
关于C中 double的问题
在C当中rn#include "stdio.h"rnmain()rnrn double x;rn scanf("%f",&x);rn printf("%f",x);rnrn输出为什么一直是 0.00000 ?rn 把double 改为 float 程序就没有问题··rn或者 在main() 中给 X 赋值 程序也可以正常输出··rn这个是哪里的问题···???具体是什么原因咯哈··
类型问题short和int的转换!!!!
Short s=(short)true?1:2; 要强制转换。rn而short s=1;却不需要强制转换,为什么?rn rnrnrnrn高手赐教啊!!!!!!!rn
byte[] 与short、float、double的相互转换
public class ShortFloatDoubleToByte { /** * double To byte[] * @param d * @return */ public static byte[] double2Bytes(double d) { long value = Double.doubleToRawLongBits(d); byte[] byte...
Cstring到unsigned short*转换的问题
想问一下MFC中关于CString转换的一个问题: rn我现在有个file1的CString,然后我想从这个文件中生成一个Bitmap,rnrnBitmap bitmap(file2,FALSE);rn但是现在bitmap的第一个参数是unsigned short*的类型,我试过几个方法不过都没达到目的,rn感觉对于MFC中这方面的转换问题很混乱,所以希望能给下指点,怎样才能很好地解决这个问题。要是能顺便讲讲相关rn这方面的知识就更感谢了!rnrn以下是原始Debug提示信息:rnerror C2664: '__thiscall Gdiplus::Bitmap::Gdiplus::Bitmap(const unsigned short *,int)' : cannot convert parameter 1 from 'class CString' to 'const unsigned short *'
unsigned short[]转换char[]的问题
unsigned short ns[1000];rnchar sz[1000];rnrnns中保存的数据为"a b c d"rnrn使用rnWideCharToMultiByte(CP_ACP,0,ns, -1, sz, ncount,NULL,FALSE)rn进行转换,当ncount<1000的时候,发现sz中得到的字符串为"a b c d????"rnrn请教:怎样把?去掉
关于int或double和byte转换的问题
刚接触java不到半个月,最近要编一个读.wav文件的程序,java有个audioinputstream类,他把所有数据读到一个byte[]数组里面。但是后期处理数据的时候需要将每两个byte转换成一个int或者double(因为数据是16位的)。rn请问java有这样的函数吗?使用两个byte构造一个int或者double;还是需要自己写这样的函数。。。谢谢了~~~
【求助】关于float double转换问题
#includern#includernfloat f(float x)rn float y;rn y=x*x-5*x+4;rn return y;rn rnvoid main()rn float x;rn printf("y1=%f\n",f(2));rn printf("x=");rn scanf("%f",&x);rn printf("y2=%f\n",f(x+15));rn printf("y3=%f\n",f(sin(x)));rnrn 出现warning:D:\C语言练习文件夹\35.cpp(17) : warning C4244: 'argument' : conversion from 'double' to 'float', possible loss of datarn这个问题怎么解决啊?
[求助] 关于double和int夹杂转换的问题~~~~
如题,一个计算式中有好多int和double型的数据,进行四则运算,但结果并不如我所想,有的时候会出现很怪的问题。我知道,这是数据转换时数据丢失的问题,但不知如何避免,还请各位高手给我系统讲一下。rnrn谢谢了,先~~~
byte 跟 short的转换??
此算法把2个short(其实用12bit就可以表示大小了)rn变成 3个byte(按照次序)rn__——— __—--rnindex[0] index[1]rnrn即把上面一行的数据 顺序读入到 3个byte里rn把划底线的那两个4位去掉rnrn放到文件;然后从文件读出,再恢复成2个short;rn这是一个调试的小程序, 百思不得其解,不知道错在哪》rn rn 谢谢!!rntryrn rn rn byte buf[]=new byte[3]; rn rn buf[1]=(byte)(index[0]<<4);//index 是一个短整形数组rn buf[0]=(byte)(index[0]>>4);rn rn buf[2]=(byte)index[1];rn buf[1]+=(byte)(index[1]>>8);rn rn out.write(buf,0,3);rn System.out.print(index[0]+"\t"+index[1]+"\t"); rn rn //output the decoding ,just for dubuggingrn rn short codebuf[]=new short[2];rn rn //把3 byte的数据 恢复成2个shortrn codebuf[0]=(short)(buf[0]<<4);rn codebuf[0]+=(short)(buf[1]>>4);rn rn codebuf[1]=(short)buf[2];rn codebuf[1]=(byte)(buf[1]<<4);rn codebuf[1]+=(short)(buf[1]<<4);rn rn rn System.out.println("\t"+codebuf[0]+"\t"+codebuf[1]);
请教unsigned short *的转换
下面是Msdn的一个程序,用来枚举会话信息rn他的ServerName是参数argv[1]输入的,我现在只要枚举本机的信息,"\\127.0.0.1",所以不需要这个输入参数了,但是我在函数里面直接赋值,老是出错,编译只出一个警告,但是运行出错,请教大虾们怎么才能实现?rnrn#ifndef UNICODErn#define UNICODErn#endifrnrn#include rn#include rn#include rn#include rnrnint wmain(int argc, wchar_t *argv[])rnrn LPSESSION_INFO_10 pBuf = NULL;rn LPSESSION_INFO_10 pTmpBuf;rn DWORD dwLevel = 10;rn DWORD dwPrefMaxLen = MAX_PREFERRED_LENGTH;rn DWORD dwEntriesRead = 0;rn DWORD dwTotalEntries = 0;rn DWORD dwResumeHandle = 0;rn DWORD i;rn DWORD dwTotalCount = 0;rn LPTSTR pszServerName = NULL;rn LPTSTR pszClientName = NULL;rn LPTSTR pszUserName = NULL;rn NET_API_STATUS nStatus;rnrn rn //rn // Check command line arguments.rn //rn if (argc > 4)rn rn wprintf(L"Usage: %s [\\\\ServerName] [\\\\ClientName] [UserName]\n", argv[0]);rn exit(1);rn rnrn if (argc >= 2)rn pszServerName = argv[1];rnrn if (argc >= 3)rn pszClientName = argv[2];rnrn if (argc == 4)rn pszUserName = argv[3];rn //rn // Call the NetSessionEnum function, specifying level 10.rn //rn do // begin dorn rn nStatus = NetSessionEnum(pszServerName,rn pszClientName,rn pszUserName,rn dwLevel,rn (LPBYTE*)&pBuf,rn dwPrefMaxLen,rn &dwEntriesRead,rn &dwTotalEntries,rn &dwResumeHandle);rn //rn // If the call succeeds,rn //rn if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA))rn rn char s[200];rn fprintf(stderr, "count:");rn fprintf(stderr,itoa(dwEntriesRead,s,100));rn fprintf(stderr, "status:");rn fprintf(stderr,itoa(nStatus,s,100));rn if ((pTmpBuf = pBuf) != NULL)rn rn //rn // Loop through the entries.rn //rn rn for (i = 0; (i < dwEntriesRead); i++)rn rn assert(pTmpBuf != NULL);rnrn if (pTmpBuf == NULL)rn rn fprintf(stderr, "An access violation has occurred\n");rn break;rn rn //rn // Print the retrieved data. rn //rn wprintf(L"\n\tClient: %s\n", pTmpBuf->sesi10_cname);rn wprintf(L"\tUser: %s\n", pTmpBuf->sesi10_username);rn printf("\tActive: %d\n", pTmpBuf->sesi10_time);rn printf("\tIdle: %d\n", pTmpBuf->sesi10_idle_time);rnrn pTmpBuf++;rn dwTotalCount++;rn rn rn rn //rn // Otherwise, indicate a system error.rn //rn elsern fprintf(stderr, "A system error has occurred: %d\n", nStatus);rn //rn // Free the allocated memory.rn //rn if (pBuf != NULL)rn rn NetApiBufferFree(pBuf);rn pBuf = NULL;rn rn rn // rn // Continue to call NetSessionEnum while rn // there are more entries. rn // rn while (nStatus == ERROR_MORE_DATA); // end dornrn // Check again for an allocated buffer.rn //rn if (pBuf != NULL)rn NetApiBufferFree(pBuf);rn //rn // Print the final count of sessions enumerated.rn //rn fprintf(stderr, "\nTotal of %d entries enumerated\n", dwTotalCount);rnrn return 0;rn
问个关于double Double的问题
[code=Java]rn/*rn String s = "1,2;3,4,5;6,7,8";rn 分成rn 对应的数组rn d[0, 0] = 1.0; d[0, 1] = 2.0;rn d[1, 0] = 3.0; d[1, 1] = 4.0; d[1, 2] = 5.0;rn d[2, 0] = 6.0; d[2, 1] = 7.0; d[2, 2] = 8.0;rn */rnrn String s = "1,2;3,4,5;6,7,8";rn String[] spt = s.split(";");rn Double[][] dou;rn dou = new Double[spt.length][];rn rn for( int i = 0; i < spt.length; i++ ) rn String[] str = spt[i].split(",");rn dou[i] = new Double[str.length]; rn for(int j = 0; j < str.length; j++ ) rn dou[i][j] = Double.valueOf(str[j]);rn rn rn for( int i = 0; i < spt.length; i++ ) rn for( int j = 0; j < dou[i].length; j++ ) rn System.out.print(dou[i][j] + " ");rn rn System.out.println();rn rnrn[/code]rnrn[code=Java]rn/*rn String s = "1,2;3,4,5;6,7,8";rn 分成rn 对应的数组rn d[0, 0] = 1.0; d[0, 1] = 2.0;rn d[1, 0] = 3.0; d[1, 1] = 4.0; d[1, 2] = 5.0;rn d[2, 0] = 6.0; d[2, 1] = 7.0; d[2, 2] = 8.0;rn */rnrn String s = "1,2;3,4,5;6,7,8";rn String[] spt = s.split(";");rn double[][] dou;rn dou = new double[spt.length][];rn rn for( int i = 0; i < spt.length; i++ ) rn String[] str = spt[i].split(",");rn dou[i] = new double[str.length]; rn for(int j = 0; j < str.length; j++ ) rn dou[i][j] = Double.parseDouble(str[j]);rn rn rn for( int i = 0; i < spt.length; i++ ) rn for( int j = 0; j < dou[i].length; j++ ) rn System.out.print(dou[i][j] + " ");rn rn System.out.println();rn rnrn[/code]rnrnrn2段代码功能是一样的,问题是double 是基础类, Double是封装的类rn为什么double也可以NEW,和Double NEW有什么不同吗?rnDouble new我知道先在STACK 生成一个引用 然后 数据是在堆里面生成,那么new double内存又rn是如何分配的
关于jmp short 问题
jmp short 位移范围是-128~127 为什么我执行超过127字节没有错,还是我的理解错误代码如下rnrn ASSUME CS:CODE,DS:DATArnDATA SEGMENTrn DB 1,2,4,5,6rn rnDATA ENDSrn rnCODE SEGMENT rn START: INC AXrn JMP S0rn MOV BX,3rn MOV BX,3rn MOV BX,3rn MOV BX,3rn MOV BX,3rn MOV BX,3rn MOV BX,3rn MOV BX,3rn MOV BX,3rn MOV BX,3rn MOV BX,3rn MOV BX,3rn MOV BX,3/*长度3个字节*/rn [color=#FF0000] (这里复制50次 MOV BX,3)>127[/color] rn S0: INC BX ([color=#FF0000]为什么还可以跳到这里来执行[/color])rn JMP START rn rnCODE ENDSrnEND STARTrn
byte,short, int ,long, short, double 各站多少位(lijieleon)
谢谢rnrn
Java中关于int,short之间的转换
代码:rnrnpublic class Demo rnrnrn /**rn * Demo:int,short之间的转换rn */rn public static void main(String[] args) rn rn int i=1;rn short s=1;rn //s=i;//①错误,需强制转换为(short)rn s+=i;//②正确rn //s=s+i;//③错误,正确为s=(short)(s+i)rn System.out.println(s);rn rnrnrnrn问题:rn ②不是可以写成③吗?为什么②正确而③错误?
关于short的问题
short s1 = 1;rns1 = s1 + 1;rnrns1 += 1;rnrnrn这两者为什么产生的结果不一样呢?希望能解释一下
关于short问题
short s = 1;rn s= s+1;这个会报错 下面的不会 (强转后就不出错)s=(short)(s+1);rn rn s+=1; rn为什么!rn
BYTE TO double和 float 转换问题
十六进制=64776F72rn变成float=1685548928rn变成double=1685548914 (这个是对)rn为什么FLOAT不对呢?
static_cast对double转换的问题
我是个C++新手,在做练习的时候遇到问题:用turbo C++或者DEV-C++和用MS的VC编译运行结果不一样。源码如下:rn#includern#includern#include rnint main()rnrn cout<<"please input a number"<>num;rn for(int i=0;i<=5;i++)rn rn temp1=static_cast(pow(10,(5-i)));rn temp2=static_cast(pow(10,i));rn temp3=static_cast(pow(10,(5-i)));rn mun+=(num/temp1*temp2);rn //cout<
一个double *与char *转换问题
举个例子:rn void main()rnrn double d[10]=1,2,3,4,5;rn cout<<"(char *)d"<<(char *)d<
double 和 String 之间的转换问题
最近在做数据处理的过程当中,设计到了,数据类型之间的转换,从数据库的数据类型为float类型,在mybaits框架中,接收的时候,以Sting类型接收,而问题出现了,在double 转 String 类型的时候,出现了科学计数法显示的状况。为什么会出现这样的状况呢? 原因是“Double转成String 数据位数比较长时会转换成科学计数法显示”。 于是尝试用 BigDecimal类型对数据进行转
float to double 转换问题vb.net?
已经把采集来的数据保存成double型,但是转换成double型,rn Convert.ToDouble只是将数据原封不动的转换,不符合要求!rn我想转换为原来的数值:rn如:1176256512原值为10000.0rn或者+1176256512原值为10000.0rn
字节数组与double之间的转换问题
请问怎么样将8个字节转换成double型?rn
C# double与字符串的转换问题
有变量通过计算后值如下:rndouble xx=999918308382201.75;rn如何才能把它转换为字符rn我试过了方法如下:rnstring str=xx.toString();rnstring str=xx.toString("N").Replace(",","");rnstring str=string.Format("0:#0.00"),xx);rnrnSystem.Globalization.NumberFormatInfo provider = new System.Globalization.NumberFormatInfo();rnprovider.NumberDecimalDigits = 4; //要设定的小数位数rnstring str= xx.ToString("N", provider);rn得到的结果都是:rn999918308382202.00
字节数组转换single和double的问题
现有2个字节,D15为符号位,其他为数据位,怎么才能实现转换成single类型或者double类型呢?还是差条件?
double向decimal转换问题
[img=http://p.blog.csdn.net/images/p_blog_csdn_net/Ablan_Wang/390421/o_%e6%96%b0%e5%bb%ba%20BMP%20%e5%9b%be%e5%83%8f.JPG][/img]
double向int转换的问题
先看一段代码rnunion luai_Cast double l_d; long l_l; ;rnint k;rndouble n = 20.0f;rnvolatile union luai_Cast u; rnu.l_d = (n) + 6755399441055744.0;rn(k) = u.l_l;rn这段代码是将一个double的值转换为int值的快速方法,不过在使用中在有些项目中发现(n) + 6755399441055744.0;这一步后u.l_d始终为6755399441055744.0,好像是到了上限样,各位高人告诉下是否vs需要专门设置才能正常使用
C和C++的double问题
最近在做POJ2109时,看到网上直接用double和pow做的rnrn分别用C++和C都提交了一遍,结果C++能过,C过不了rnC++rn#include rn#include rn#include rnusing namespace std;rnrnconst double eps=1e-6;rnrnint main()rnrn double n,p;rn while(scanf("%lf %lf",&n,&p)!=EOF)rn rn double ans=pow(p+eps,1.0/n);rn printf("%.0lf\n",ans);rn rn return 0;rnrnrnCrn#include rn#include rnrnconst double eps=1e-6;rnrnint main()rnrn double n,p,ans;rn while(scanf("%lf %lf",&n,&p)!=EOF)rn rn ans=pow(p+eps,1.0/n);rn printf("%.0lf\n",ans);rn rn return 0;rnrnrn深入研究过这些的大神给讲讲这是为什么啊rn不胜感激!
大小写的short,long,double有什么不一样?
和原来定义一样,在wtypes.h里,难道也是为了宽字符?rn这种东西也有宽字符的说法?还是什么别的意思?
相关热词 c#检测非法字符 c#双屏截图 c#中怎么关闭线程 c# 显示服务器上的图片 api嵌入窗口 c# c# 控制网页 c# encrypt c#微信网页版登录 c# login 居中 c# 考试软件