精华内容
下载资源
问答
  • 提高double /float 强转为int类型的速度

    千次阅读 2011-07-15 09:44:26
    /* double到整数的转换超强的算法,无误差 (利用了IEEE浮点编码格式) ,比使用C语言 int a = (int)(浮点数)快很多*/ static inline int DoubleToInt_IEEE(double value) { static const d

    /* double到整数的转换超强的算法,无误差 (利用了IEEE浮点编码格式) ,比使用C语言 int a = (int)(浮点数)快很多*/
     static inline int DoubleToInt_IEEE(double value)
     {
      static const double magic = 6755399441055744.0;  // (1<<51) | (1<<52)
      double tmp = value + magic;
      return *(int*)&tmp;
     }
     /* float到整数, 允许存在误差情况使用*/
     static inline int Fast_FloatToInt_IEEE(float value)
     {
      static const float magic_f = (3<<21);
      static const long magic_i = 0x4ac00000;
      float ftmp = value + magic_f;
      return  (*((int*)&ftmp)-magic_i) >> 1;
     }

     

     

    static_cast<int>(f) 

    最快

    展开全文
  • double是64位,int是32位,int最大值为2^31-1=2147483647。所以当double大于2147483647时,强转为int型时值为 2147483647 *****有何问题,还望大神指出*****

    double是64位,int是32位,int最大值为2^31-1=2147483647。所以当double大于2147483647时,强转为int型时值为  2147483647





    *****有何问题,还望大神指出*****

    展开全文
  • class Program { private static void Main() { object obj = 1;... Convert.ToDouble在运行时的行为和(double)这样的强转,到底有什么不同? 如果这两个行为不一样,什么时候用哪一种才对呢? 谢谢。
  • char转为int计算,结果int char* double ----> char转为double计算,结果ouble int ---> float ---> double :低精度可以自然转为高精度;反之,高精度需强转为低精度; 2.定义数组: int a[5] = {...

    1.计算时转换:

       int * float ----> 均转为double计算,结果double

       char * int ----> char转为int计算,结果int

       char * double ----> char转为double计算,结果ouble

       int  ---> float  --->  double :低精度可以自然转为高精度;反之,高精度需强转为低精度;

    2.定义数组:

      int a[5] = {1,2,3,4,5}

    3.冒泡算法:

      思想:每次将相邻的两个数进行比较,将小的放到前面,就是沉大法。一趟下来,可将最大的/最小的沉出来。

      eg:5个数,要比较4躺,第1趟:比较4次,将大的沉下去;第2躺:比较3次;

      算法实现:

    for(i=0; i<4; i++){
       for(j=0; i<4-i; j++){
           if(a[j] > a[j+1]){
               t = a[j];
               a[j] = a[j+1];
               a[j+1] = t;
           }
       } 
    }

    eg:n个数:

    for(i=0; i<n-1; i++){
       for(j=0; i<n-1-i; j++){
           if(a[j] > a[j+1]){
               t = a[j];
               a[j] = a[j+1];
               a[j+1] = t;
           }
       } 
    }

    4.二维数组:

      int a[3][4] ={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12} } 

     第1维的长度可以省略,第2维的长度不能省略;

     eg:int a[][4] = {}   (☑️)                        int a[4][] = {}   (❌)     

    5.二维字符数组,可用于打印***

     eg:打印下面的图形:

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

    char a[5][5] = {{'*''*''*''*''*'}, {'*''*''*''*'}, {'*''*''*'}, {'*''*'}, {'*'}}
    for(i=0; i<5; i++){
        for(j=0; j<5; j++){
            printf("%c",a[i][j]);
        }
        printf("\n");          -----换行
    }
    
    

    6.字符串的一些函数:

        strcat (str1, str2)    将2连接到1中;

        strcpy (str1, str2)    将2复制到1中;

        strcmy (str1, str2)    将1与2比较;  1>2 :正数; 1=2 :0 ; 1<2 :负数;

        strlen (str)      str的字符长度;

    7.函数使用时首先要声明:

         声明的作用:1》在主函数中调用时,能够识别那是函数名;

                               2》便于检查在调用时传递的参数类型及个数是否对;

    8.递归调用: 函数中调用它本身

       ====>第1个人年龄位10岁,第2个比前一个大2岁,......第5个比前一个大2岁,求第5个人的年龄的递归;

    int age(int n){
        int  score;
        if( n == 1 ){
            age = 10;
        }else{
            score = age(n-1) + 2;
        }
        return score;
    }

    9.递归的生活应用:   汉娜塔,移盘子问题

    思路:将n个盘子从A移到C;

    1》将A上n-1个盘子借C移到B;

    2》将A座上剩下一个盘子移到C;

    3》将n-1个借A从B移到C;

    void hanoi(int n, char A, char B, char C){
        void move(char x, char y);        ----->声明函数
        if(n == 1){
            move(A, C);
        }else{
            hanoi(n-1, A, C, B);
            move(A, C);
            hanoi(n-1, B, A, C);
        }
    }
    
    move(char x, char y){
        printf(" %c ----> %c ", x, y)      ----->移动为打印
    }

    10.自动变量,静态局部变量区别:

         自动变量:调用后就自动释放的存储空间;

         静态局部变量:调用结束后不消失而继续保留上一次结束的值;

    11.指针:

        int  *p ;

        p = &a[0] ;  将 a[0] 元素的地址赋值给p

        ===》 int  *p = &a[0] ;

        ===》 int  *p = a  ;       首地址

       指针的数据交换:

    void swap(int *p1, int *p2){
        int temp;
        temp = *p1;
        *p1 = *p2;
        *p2 = temp;
    }
    ---》交换后,并不会改变原先指向的a,b值,只是改变了其指向的地址;

    12.指针加减:

       p+1:指向同一数组的下一个元素 ;

       p-1:指向同一数组的上一个元素 ;   

    13.排序:选择排序算法:

      1》 找出一个最小的数,交换到最前面;

      2》 再从剩下的里面,再找一个最小的,交换到剩下的数最前面;

     思路:1》将第1个数作为基数,命令它最小;

                2》与后面的数进行一一比较,若比基数小,那么记录下它的序号,直至比较完为止;

                3》这一趟比较完之后,将记录下最小的数的序号交换到最前面;

    void select_sort(int a[], int n){
        for(int i=0; i<n-1; i++){
            int min_index = i;
            for(j=i+1; j<n; j++){
                if(a[j] < a[min_index]){
                    min_index = j;
                }
            }
            if(i != min_index){    -->当min_index变了是,说明后面有比第1个基数小的数;
                int temp = a[i];
                a[i] = a[min_index];
                a[min_index] = temp;
            }
        }
    }

    14.优先级:

        ++  >  ||   >   =   

        eg:  int  x=1 , y=1 , c = 0 ;      c = x++ ||  y++        输出x,y,c

        先x++,再||, x = 2,c=1,y=1;

     15.引用与指针区别?

       1》初始化:引用必须初始化;指针不必;

       2》是否改变值:引用初始化以后不能被改变;指针可以改变所指的对象;

       3》能否空值:引用不能指空值;指针可以;

     16.大小写字母的ASCII码转换

        *C -= 'A' - 'a';        因为: 'A'=65       'a' = 97       'A' -'a' = -32       

        所以:*C -=  -32

                 *C  =  *C -(-32) =  *C +32       即:将大写字母变成小写字母的操作

      17. extern:扩展作用,将变量的作用扩展到其他文件中使用;

      18. 运算符的优先级: 算术  >  关系运算符  >  &&  >  ||  >  赋值

      19. 大小写字母比较: 小写字母a  比大写字母A   大   32 ,即:a=97,A= 65

      20.访问字符串中的每个字符:

          1》访问:   

    StringBuffer str = new StringBuffer("abcde");
    Char c = str.charAt(i);

          2》判断c是不是小/大写:

    Charccter.isLowerCase(c);
    Charccter.isUpperCase(c);

          3》将c转换为小/大写:

    Charccter.toLowerCase(c);
    Charccter.toUpperCase(c);

          4》若要在内部改变字符,要用StringBuffer,不能用String

      21. final 与 static 区别:

           final:修饰变量,类,方法;  不可被修改,不能被继承;

           static:修饰变量,类,方法;可通过类名,变量名,方法名直接调用;值可被修改,修改后,其他人再使用时,为修改后的值;

      22.长度计算:

           sizeof()  :计算分配的内存长度,包含"\0"结束符;

           strlen()  :计算字符串长度;

            eg:  "one"        sizeof() = 4 ;   strlen() = 3 ;

      23.数值进制之间的转换:

           1》十进制  ---->   其他: 除基取余,从下到上;(小数:乘基取整,从上到下);

           2》二进制 ----> 八 ---> 十六  :8421码,不够补0;     

           3》十六   ---->  十   : 16的x次方      eg:3D8           111

           4》八      ---->  十   : 8的x次方       eg:92              

           5》二      ---->  十   : 2的x次方       eg:110              

       24. 原码,补码,反码:

           1》正数: 补码,反码 都是本身;

           2》负数: 反码: 除符号位外,其余位取反;

                             补码:反码+1;

    展开全文
  • 20200406_类型安全

    2020-04-07 14:05:02
    20200406_类型安全 ...类型是否安全,取决于它能否在使用中被外部转换,例如在C语言中int可以隐式转换为doubledouble可以强转为int,这都是不安全的。 二、笔试题 1、#define DOUBLE(x)x+x, i=5*DOUBLE(5);...

    20200406_类型安全

    每日小知识

    使用everything搜索文件时,前面添加【exe:】可以直接搜索可执行程序,如【exe:qq】。

    一、相关术语

    • 类型安全
      类型是否安全,取决于它能否在使用中被外部转换,例如在C语言中int可以隐式转换为double,double可以强转为int,这都是不安全的。

    二、笔试题

    1、#define DOUBLE(x)x+x, i=5*DOUBLE(5);求i的值
    答:宏只是符号替换,没有优先级,所以是5*5+5=30。

    2、C++是不是类型安全的?
    答:不是。通过reinterpret_cast强制转换两个不同类型的指针。

    3、main函数执行以前,还会执行什么代码?
    答:main调用之前,还会调用【全局对象】的构造函数。

    4、哪些情况只能用initialization list而不能用assignment?
    答:当类中含有const、reference成员变量;基类的构造函数都需要初始化列表【initialization list】。

    扩展笔试题:若存在15×4=112,则系统采用的是几进制?(腾讯2011)
    答:六进制。方法:假设为A进制,把15×4=112按权展开就是:
    15 = 1×A1 + 5×A0
    4 = 4×A0
    112 = 1×A2 + 1×A1 + 1×A0

    换成等式:
    (A+5)×4 = A2 + A + 2
    A2 - 3A - 18 = 0
    (A - 6)(A + 3) = 0

    因此A有两个值6或-3,但进制不存在负数,所以结果为【六】进制。

    验证一下:15转换十进制后是【11】,4转换十进制后是【4】,11×4=44,112转换十进制后是【44】。

    知识扩展

    C++的四种类型转换。

    本文归类

    建议归类到【C++】。

    明日计划

    1、描述内存分配方式以及它们的区别。
    2、struct与class的区别?
    3、当类A中没有任何成员变量与成员函数时,sizeof(A)的值是多少?

    参考文献:

    《C++笔试面试宝典2011版.docx》

    如何在markdown中打出上标、下标和一些特殊符号
    https://www.jianshu.com/p/80ac23666a98

    今日收藏:

    若存在15×4=112,则系统采用的几进制?_虎课网

    展开全文
  • 要想把1.0/n的结果转换为int类型要,(int)(1.0/n);。。。错误的写法(int)1.0/n; 这样写只把1.0强转为int如果n带入的值是double,那么他们的计算结果仍然是double。。。。
  • C++ -- 四种类型转换

    2018-06-14 12:07:46
    C++四种类型转换的引入 1.在C语言中也有类型转换 ①例1:相近类型之间可进行隐式类型转换 int a = 10; double b = a; //将int转换为double,然后赋值给b ... //将int强转为int* 对于强制类型转换来说,有...
  • byte->short->char->int->long->float->double 1->2->2->4->...为什么Double不能够强转为int型?double却可以? Doubledouble的封装类,Double定义的数据,其...
  • 输入a ,b ,c 三个数对应整形,单精度浮点型,双精度浮点型 <%int a=Integer.parseInt(request.... 强转为int型float b=Float.parseFloat(request.getParameter("b")); double c=Double.parseDouble(request.g...
  • 1、类型转换(0106)

    2017-01-11 19:07:22
    强转为int类型,输出如图所示的结果。(注意:当强制转换时,精度有损失)package 作业;public class 类型转换 { public static void main(String[] args) { // TODO Auto-generated method stub double
  • JDK1.7之前switch(expre1)函数中,expre1是一个... 注意,对于精度比int打的类型,比如long、float、double,不会自动转换为int,如果想使用,就必须强转为int,如(int)float。 jdk1.7后,整型,枚举类型,boole...
  • 选择题 1-10:ABCD C C C D D A C C A 11-16:B C A B A B 简答题 1.==是比较两边的值是否...注意,对于精度比int大的类型,比如long、float、double,不会自动转换为int,如果想使用,就必须强转为int,如(int)fl...
  • 重学Java_4.随机数

    2021-06-20 14:52:59
    如果需要int类型的只需再变量前加(int)将结果强转为int,如取[0,100)之间的interesting整数 2. 通过Math.random()返回一个0到1之间的double值。 使用java.long.Math下的Math类中的random方法,生成的是[0,1)...
  • 用Math.random()方法生成随机数

    千次阅读 2017-11-08 20:41:34
    生成的区间为[0,1); //计算随机数公式:*(最大值-最小值+1)+最小值 //求200到18之间的随机数 //double rendom=Math.random(); //System.out.println(rendom); for(int i=0;...//强转为int类型 Syst
  • 今天是2016年7余28日,晴天 知道了如何查看字节:sizeof(int);printf("%d,"sizeof(int));要记住char,int的字节,,类型...知道了何如强转:大的转给小的会有数据遗失,比如float强转为int.格式:float f=100.223;pri
  • C/C++--四舍五入的方法

    2020-04-16 12:39:03
    一个带有小数位的浮点数,加上0.5再强转为int型,即可实现,代码实现: #include<bits/stdc++.h> using namespace std; int main(){ int a1,a2; double x=1.6,y=1.4; a1=x+0.5; a2=y+0.5; cout<&l...
  • 二分法取整死循环

    2021-03-24 15:01:59
    9/2是整数之间的运算,结果为整数,因此ceil接收的是整数4,被强转为double型(4.0),因此结果是4.0 9.0/2是doubleint的运算,结果向上转型为double,因此ceil接受的参数是double型的4.5, 因此结果为5.0 (double)9/2是将9...
  • C语言面试题

    2019-01-25 18:28:32
    解析:a被强转为int型,加号后面b/b是两个double型相除取整等于1.000000。前后相加后自动向高精度。 若变量已正确定义,一下非法的表达式是() A、a /= b+c B、a%(4.0) C、a = 1/2*(x=y=20, x*3) ...
  • 因为查出来的数据结果是’‘1.0’’,为object类型,上传数据格式就会有问题,期望值是1 于是进行强制转换,强转int类型报错:double不可转换int,就又强转为double,然后强转int类型又报错,请教别人后,告知,其实不用强转也...
  • PAT-B1050 螺旋矩阵(25)

    2018-07-16 19:18:12
    分析:得到了m和n之后,根据m和n的...由于ceil()函数返回值为double强转为int会失真,所以用(int)min(m, n) + 1) / 2进行圈数的计算。注意,当填充了若干圈后,若只剩下一列没有填充,这个时候就不可以再向上填充了。
  • 示例如下:float num= (float)2/3;DecimalFormat df = new DecimalFormat("0.00");...//返回的是String类型,如果没有强转为float或者double,那么int型的2除以3,结果就会默认只有整数,没有小数点后的数值。
  • day04_

    2019-10-08 14:06:20
    关键字(被编程语言赋予特定含义的单词) 变量是:数据的临时存储(内存) 变量的三个元素:类型;名;值 int max = a >... monney =(int) (double)// 强转为整数:int 。 键盘录入: ...
  • Java常用类型转换总结

    2019-10-17 21:42:41
    在平常做项目、刷LeetCode题目、面试手写编程题中,我们会经常... 整型相除强转为double 1、字符转int String str=“123456”; int i=Integer.parseInt(str); 2、字符串数组转String char ch[]=new char[]{‘5’,...
  • 直接上代码 #include &lt;iostream&gt; #include &... //double(11) 将int类型 强转为double类型 //string转char*。主要有三种方法可将str转换为char*类型:data(); c_str(); copy();...
  • java学习2.2

    2019-11-11 16:09:32
    弱类型:var 类型:java java有八种基本类型如图一 ...java不同类型降格需添加(降后类型)强制转化会导致精度丢失如cpp中float型转为int型 升格不需添加额外标志 字符型和数字型转换遵循ASCII码 特...
  • 基本运算符

    2020-11-10 16:20:56
    基本运算符 ...除法时,要把类型强转为double package operator; public class Demo01 { public static void main(String[] args) { int a = 10; int b = 20; System.out.println(a+b); //30 System.
  • 数据类型

    2017-12-13 10:31:12
    基本数据类型 整型 byte 1字节 ...int 4字节 ...double 双精度 8字节 ...注意:浮点型默认是double,如果直接写float money=99.9会报错,必须强转为单精度的:99.9f 字符型
  • 整型相除强转为double 1、字符转int String str=&amp;quot;123456&amp;quot;; int i=Integer.parseInt(str); /*-----------------------------------------------------------*/ 2、...
  • Java随机函数概述

    2021-05-02 19:22:59
    Math.random(); 这个函数的返回之是double类型,需要强转为自己想要的类型,而且其返回的范围是[0,1)估需要进行基本运算改变其范围 eg:范围是0-31则需要:(int)(Math.random()*30)+1;即可

空空如也

空空如也

1 2 3
收藏数 45
精华内容 18
关键字:

double强转为int