类型转换

类型转换

泪湿孤枕 提交于 2019-11-30 01:27:27
类型转换 在编程语言中类型转换主要包括自动类型转换(也叫隐式类型转换)和强制类型转换 自动类型转换是编译器自己转换的,这种转换只能从低位向高位转换,以下四种情况会发生自动类型转换 算术运算式中,低类型能够转换为高类型。 赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型; 函数调用中参数传递时,系统隐式地将实参转换为形参的类型后,赋给形参。 函数有返回值时,系统将隐式地将返回表达式类型转换为返回值类型,赋值给调用函数。 例如:int i=0; byty j=1 int c=i+j; 强制类型转换是高位转为低位,这种转换会丢失精度,加入一个double 类型的数据转换为一个int类型的数据则小数点后面的则会丢失 例如: double i=12.7; int j=(int)i;//j=12 在没有必要的时候不要使用强制转换,因为强制转换会使数据发生一些改变 来源: https://www.cnblogs.com/xiao-cao/p/11543823.html

C++负数类型转换,-1对256取模

戏子无情 提交于 2019-11-30 00:54:42
最近在读C++ primer的时候,发现p32上写道:当我们赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数。因此,把-1赋值给8比特大小的unsigned char所得的结果是255。 -1怎么取模? 这里先明确一下取模和取余的区别:(百度百科) 取模运算(“Module Operation”)和取余运算(“Complementation ”)两个概念有重叠的部分但又不完全一致。主要的区别在于对负整数进行除法运算时操作不同。取模主要是用于计算机术语中。取余则更多是数学概念。模运算在数论和程序设计中都有着广泛的应用。 对于整型数a,b来说,取模运算或者求余运算的方法都是: 1.求 整数商: c = a/b; 2.计算模或者余数: r = a - c b. 求模运算和求余运算在第一步不同: 取余运算在取c的值时,向0 方向舍入(fix()函数);而取模运算在计算c的值时,向负无穷方向舍入(floor()函数)。 例如计算:-7 Mod 4 那么:a = -7;b = 4; 第一步:求整数商c,如进行求模运算c = -2(向负无穷方向舍入),求余c = -1(向0方向舍入); 第二步:计算模和余数的公式相同,但因c的值不同,求模时r = 1,求余时r = -3。 归纳:当a和b符号一致时,求模运算和求余运算所得的c的值一致,因此结果一致。

Spring security后台使用自定义注解进行权限控制

℡╲_俬逩灬. 提交于 2019-11-30 00:29:05
最近在使用spring security进行编码,在实际使用的过程中,遇到的问题记录一下。 背景:在一个项目中,我使用spring security进行权限控制。不仅前台控制页面和按钮的显示,还在后台对没有权限的请求进行过滤。因为每个需要进行权限控制的后台请求,都需要写相同的代码,如果一个两个还好,写多了就开始想能不能减少代码量。 先看看没有使用自定义注解的时候是怎么在后台进行权限控制的 上面的例子是一个上传文件后台请求,我们需要判断这个用户是否有上传文件的权限。在这里我定义了一个工具类AuthenticationUtil,用来判断用户有没有登录(authen),和判断用户是否具有某个权限(authenRole),并把判断结果放到Map中。如果没有权限,就不再执行后面的语句。假如我每个请求都需要判断权限,那么每个请求的开头都需要加这样5行代码,这样代码重用性就低。而且controller里面不能专注关心业务,还混入了权限的代码。 为了解决这个问题,使用自定义注解,插入一个AOP,可以很好的解决这个问题。 看一下使用AOP之后的代码 一行代码就完成之前5行代码做的事情,是不是很简洁,controller中也不用再关心权限的问题了。 这里我使用Springboot中的Aop技术,定义一个切面,使用around进行注入。 1.自定义注解AuthenticRequire package

数据类型及类型转换

喜欢而已 提交于 2019-11-29 21:06:08
数据类型及类型转换 JS的六大数据类型   JS有六种数据类型      1.基本数据类型:       Number     123       String    ‘abc’       Boolean     true,false       Undefined    undefined       Null      空     2.复杂数据类型       Object     {  }       三大引用类型       Object     {  }       Array      [ " " ]       Function      1.Number类型   Number类型包含整数和浮点数(浮点数数值必须包含一个小数点,且小数点后面至少有一位数字)两种值。   NaN:非数字类型。特点:① 涉及到的任何关于NaN的操作,都会返回NaN ② NaN不等于自身。   isNaN() 函数用于检查其参数是否是非数字值。   isNaN(123) //false   isNaN("hello") //true  2.String类型   字符串有length属性。   字符串转换:转型函数String(),适用于任何数据类型(null,undefined 转换后为null和undefined;toString()法(null,defined没有toString(

转载 :指针的强制类型转换

拟墨画扇 提交于 2019-11-29 18:45:45
c语言指针强制类型转换的应用 2017年10月28日 22:04:24 行走的帝企鹅 阅读数:2530 指针类型简介 c语言中,指针是就是内存地址,因此使用指针可以方便的操作内存数据。指针的类型标志着这个指针指向数据的类型,有两个作用: 告诉了编译器需要从这个地址开始对多少字节(n)的数据进行操作, 以及操作模式 告诉编译器当对这个指针进行增减操作时,每加(减)一对应实际地址内存移动的字节数(n) 你比如说 char* pointer1 //该指针指向从该地址开始一个1字节的内容 short int* pointer2; //该指针指向从该地址开始一个2字节的内容 long int* pointer3; //该指针指向从该地址开始一个4字节的内容 long long int* ponter4; //该指针指向从该地址开始一个8字节的内容 pointer1++ 使其对应内存地址移动一个字节 pointer2++ 使其对应内存地址移动两个字节 pointer3++ 使其对应内存地址移动三个字节 pointer4++ 使其对应内存地址移动四个字节 指针的强制类型转换 指针类型的强制类型转换就是重新告诉编译器: 需要从这个地址开始对多少字节(n)的数据进行操作, 以及操作模式 对这个指针进行增减操作时,每加(减)一对应实际地址内存移动的字节数(n) 你比如说 long int*

个人笔记——C语言入门的零散笔记

你离开我真会死。 提交于 2019-11-29 18:32:01
C语言入门的零散笔记 说明 格式/语法 整体格式 C中的注释 定义常量 ++与\-\- 输入 判断if语句 循环 switch-case 函数 C语言的类型 整数: char 浮点数: 逻辑: 指针 字符串 字符串的输入输出 字符串数组 字符串函数 自定义类型 返回类型 类型转换 自动类型转换 强制类型转换 参数 数组 如何获取数组大小? 二维数组 随机 全局变量 编译预处理 结构类型 枚举 结构 联合 大程序结构 头文件 使用其他源文件中的全局变量 文件 格式化输入输出 printf flags width / .prec type scanf flag type 文件输入和输出 二进制文件 位运算 原则 说明 笔者为考研开始学c,鉴于已经有了python基础,故之后的笔记仅对一些必要、易遗忘处进行记录 格式/语法 整体格式 # include <stdio.h> int main ( ) { printf ( "Hello World!\n" ) ; } 需要注意每条执行语句后的分号“;” C中的注释 单行注释采用// 多行注释采用/ 开头 /结尾 // 单行注释 /* 多行注释 多行注释 */ 定义常量 const int AMOUNT = 100 const是一个修饰符,表示这个变量的值一旦被初始化,就不能再修改了 ++与-- a++等效于a += 1,不过++和

JavaScript学习

心不动则不痛 提交于 2019-11-29 17:36:51
感想 目前我在学习阮一峰的JavaScript标准参考教程( https://javascript.ruanyifeng.com/?tdsourcetag=s_pctim_aiomsg ) 对于已学部分我做了一点笔记,总体来说感觉确实跟Java好像啊。因为还停留在基础知识学习的层面,还没有真刀真枪使用过。因为最近在忙个人作业,所以其实关于JavaScript的学习就慢慢搁置了。等忙完作业一定把重点放回来,我也知道不能拖,但是 分身乏术啊。。。 基本语法 1.语句 2.变量 2.1 概念 如果使用var重新声明一个已经存在的变量,是无效的。上面代码中,变量x声明了两次,第二次声明是无效的。 但是,如果第二次声明的时候还进行了赋值,则会覆盖掉前面的值。 2.2 变量提升 JavaScript 引擎的工作方式是,先解析代码,获取所有被声明的变量,然后再一行一行地运行。这造成的结果,就是所有的变量的声明语句,都会被提升到代码的头部,这就叫做变量提升(hoisting)。 console.log(a); var a = 1; 上面代码首先使用console.log方法,在控制台(console)显示变量a的值。这时变量a还没有声明和赋值,所以这是一种错误的做法,但是实际上不会报错。因为存在变量提升,真正运行的是下面的代码。 var a; console.log(a); a = 1;

C++中的强制类型转换

做~自己de王妃 提交于 2019-11-29 16:05:36
在C语言中,强制类型转换的方式为(Type)Expression,另外还有一种现在已经不用的旧式写法Type(Expression),这两种方式是等价的。 但是,C语言的强制类型转换方式存在一些问题: 过于粗暴,可以在任意类型之间进行转换,编译器很难判断其正确性 难于定位,在源代码中无法快速定位所有使用强制类型转换的语句 然而,强制类型转换在实际工程中几乎是不可避免的,为此C++将强制类型转换分为4种不同的类型,以提供更加安全可靠的转换。 强制类型转换 说 明 static_cast 用于 基本类型之间、有继承关系的类对象之间、类指针之间 的转换 不能用于 基本类型指针之间 的转换 const_cast 用于 去除变量的只读属性 强制转换的 目标类型必须是指针或引用 reinterpret_cast 用于 指针类型之间、整数和指针类型之间 的转换 dynamic_cast 用于 有继承关系的类指针之间、有交叉关系的类指针之间 的转换 具有类型检查的功能 需要虚函数的支持 C++提供的4种强制类型转换以关键字的方式出现,使用语法为: xxx_cast<Target Type>(Expression) 。 #include <stdio.h> void static_cast_demo() { int i = 0x12345; char c = 'c'; int *pi = &i;

java 类型转换的原理

[亡魂溺海] 提交于 2019-11-29 16:00:52
最近在看JDK的源码,在看源码的时候看到了0xff这么个东东,从这里引出了类型转换。因此在此记录下。 在写原理之前先看几个例子。byte b=-1;int a=b;然后打印a得出的结果是-1.int b=-1;byte a=(byte)b;打印a得出来的是-1。int a=255;byte b=(byte)255;打印b得出的结果也是-1;而把这个强制转出来的-1再转回int,得出的确不是255了,有点奇怪了。这是为什么那?好了,废话不过说,下面就开始讨论为什么了。在讲这个之前先来几个概念。二进制中的原码,反码,补码,补位,真值。再有就是byte类型和int类型分别占了多少位。这里需要说一下,二进制的高位是符号位,1表示负数,0表示正数。注:java是用补码存储数据的。 byte类型占一个字节,一个字节由8位二进制组成,所以说byte类型占了8位。int类型占4个字节,所以说int类型占了8位。 真值:这个就看字面意思,int a=-1;a的真值就是-1. 原码:int类型的-1的二进制表示,由于-1是负数,又是int类型的,所以他需要32个二进制来表示,二进制的最高位是符号位,所以为1,1的二进制为1,所以-1的二进制表示为 1000 0000 0000 0000 0000 0000 0000 0001; 反码:正数的反码就是原码,负数的反码是在原码的基础上,符号位不变

Struts2 类型转换

a 夏天 提交于 2019-11-29 14:41:28
实现的目标,将页面中的字符转为对象,如Larry;123456 转为 User对象,username为Larry,password为123456。 如何实现: Struts的类型转换,对于8个原生数据类型以及Date,String等常见类型, Struts2可以使用内建的类型转换器实现自动转换;但对于自定义的对象 来说,就需要我们自己指定类型转换的方式了。 工程用到的文件如下图所示 1、创建测试页面test.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h1>使用分号隔开用户名和密码</h1> <form action="userAction"> user info: <input