- 1. byte b = ‘a’; byte c = 1; byte d = ‘ab’; byte e = ‘啊’; byte g = 256; 这些变量有些错误是错再哪里?
- 2. byte a =255;a+=5;a的值是多少?
- 3. 现有一个整数number,请写一个方法判断这个整数是否是2的N次方
- 4. 分析下面代码,a、b的值是多少?
- 5. Math.Round(11.5)等于多少? Math.Round(-11.5)等于多少?
- 6. &和&&的区别
- 7. i++和++i有什么区别?
- 8. as和is的区别
- 9. C#中,运算符“?”和“??”的区别是什么?
- 10. 在C#中我们定义参数时经常会用到params、ref和out简述一下区别?
- 11. C#中有几种循环?分别用在什么场合?
- 12. 什么是泛型?
- 13. 在c#中error和exception有什么区别?
- 14. 能用foreach遍历访问的对象需要实现?
- 15. ExecuteScalar 和 ExecuteNonQuery 的区别
1. byte b = ‘a’; byte c = 1; byte d = ‘ab’; byte e = ‘啊’; byte g = 256; 这些变量有些错误是错再哪里?
本题考查的是数据类型能承载数据的大小。
1byte =8bit,1个汉字=2个byte,1个英文=1个byte=8bit
所以bc是对的,deg是错的。’a’是char类型,a错误
java byte取值范围是-128~127, 而C#里一个byte是0~255
2. byte a =255;a+=5;a的值是多少?
byte的取值范围是-2的8次方至2的8次方-1,-256至258,a+=1时,a的值时0,a+=5时,a的值是0,所以a+=5时,值是4
3. 现有一个整数number,请写一个方法判断这个整数是否是2的N次方
- 4(100)、5(101)、8(1000)、16(10000)
- 取模运算: 用number%2==0可以判断,但是这个有点低级
- 位运算:(使用位运算逻辑并,两个位上的都为1才是1,其余都是0,判断是否等于0)
- 4&3相当于100&011 ,结果是000等于0,所以4是2的n次方
- 5&4相当于101&100,结果是100不等于0,所以5不是2的n次方
如果要问如果是2的N次方,这个N是多少?这该怎么算?
private static byte get(int n)
{
byte number = 1;
while (n/2!=1)
{
n = n / 2;
number += 1;
}
return number;
}
4. 分析下面代码,a、b的值是多少?
string strTmp = "a1某某某";
int a = System.Text.Encoding.Default.GetBytes(strTmp).Length;
int b = strTmp.Length;
分析:一个字母、数字占一个byte,一个中文占占两个byte,所以a=8,b=5
5. Math.Round(11.5)等于多少? Math.Round(-11.5)等于多少?
- Math.Round(11.5)=12
- Math.Round(-11.5)=-12
6. &和&&的区别
- 相同点
&和&&都可作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,其结果才为true,否则,只要有一方为false,则结果为false。(ps:当要用到逻辑与的时候&是毫无意义,&本身就不是干这个的)
- 不同点
if(loginUser != null && string.IsnullOrEmpty(loginUser.UserName))
&&具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,对于上面的表达式,当loginUser为null时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。(ps:所以说当要用到逻辑与的时候&是毫无意义的)
& 是用作位运算的。
- 总结
&是位运算,返回结果是int类型
&&是逻辑运算,返回结果是bool类型
7. i++和++i有什么区别?
- 1.i++是先赋值,然后再自增;++i是先自增,后赋值。
- 2.i=0,i++=0,++i=1; Console.WriteLine(++i==i++); 结果位true
8. as和is的区别
- as在转换的同时判断兼容性,如果无法进行转换,返回位null(没有产生新的对象),as转换是否成功判断的依据是是否位null。is只是做类型兼容性判断,并不执行真正的类型转换,返回true或false,对象为null也会返回false。
- as比is效率更高,as只需要做一次类型兼容检查。
is是用来判断类型A能否转化为类型B,一般用来作有继承关系的父类与子类是否可以相互转化的判断。而as是将类型A转化为类型B,一般也是用来做子类与父类的转换。
9. C#中,运算符“?”和“??”的区别是什么?
- (?)运算符是指:可以为 null 的类型
int? x = null;//定义可空类型变量
i=3?2:5 //还可为三元运算符
- (??)运算符是指:null 合并运算符,合并运算符为类型转换定义了一个预设值,以防可空类型的值为Null
int? y = x ?? 1000;//使用合并运算符,当变量x为null时,预设赋值1000
10. 在C#中我们定义参数时经常会用到params、ref和out简述一下区别?
- ref型传递变量前,变量必须初始化,否则编译器会报错,而out型则不需要初始化
- ref型传递变量,数值可以传入方法中,而out型无法将数据传入方法中。换而言之,ref型有进有出,out型只出不进。
- out型参数 与ref型类似,仅用于传回结果。
- 都是按引用类型进行传递
- 属性不是变量不能作为out、ref参数传递
- ref参数必须初始化。out不需要初始化
- 作用,当方法有多个返回值时,out非常有用
- params关键字,官方给出的解释为用于方法参数长度不定的情况。有时候不能确定一个方法的方法参数到底有多少个,可以使用params关键字来解决问题
11. C#中有几种循环?分别用在什么场合?
1.do while:不管符不符合条件都会运行一次,在运行一次在之后再进行判断是否符合条件。
2.while:首先判断是否符合条件在进行运行。
3.for和while的意思差不多只是表达形式不同;一般需要定义局部性控制循环的的变量使用。
4.foreach:只能对数据进行读;在其作用域内不能对进行遍历的值做修改,其遍历顺序只能递增而且其控制循环变量是默认的只能++
12. 什么是泛型?
泛型是程序设计语言的一种特性。允许程序员在强类型程序设计语言中编写代码时定义一些可变部分,那些部分在使用前必须作出指明。各种程序设计语言和其编译器、运行环境对泛型的支持均不一样。将类型参数化以达到代码复用提高软件开发工作效率的一种数据类型。
泛型类是引用类型,是堆对象,主要是引入了类型参数这个概念。
13. 在c#中error和exception有什么区别?
Error(错误)表示系统级的错误和程序不必处理的异常,是java运行环境中的内部错误或者硬件问题。比如:内存资源不足等。对于这种错误,程序基本无能为力,除了退出运行外别无选择,它是由Java虚拟机抛出的。
Exception(违例)表示需要捕捉或者需要程序进行处理的异常,它处理的是因为程序设计
的瑕疵而引起的问题或者在外的输入等引起的一般性问题,是程序必须处理的。
Exception又分为运行时异常,受检查异常。
- 运行时异常,表示无法让程序恢复的异常,导致的原因通常是因为执行了错误的操作,建议终止程序,因此,编译器不检查这些异常。
- 受检查异常,是表示程序可以处理的异常,也即表示程序可以修复(由程序自己接受异常并且做出处理), 所以称之为受检查异常。
14. 能用foreach遍历访问的对象需要实现?
IEnumerable接口或声明GetEnumerator方法的类型
注:不一定要实现IEnumerable接口,但一定要实现GetEnumrator方法。
15. ExecuteScalar 和 ExecuteNonQuery 的区别
ExecuteNonQuery:返回受影响的行数。
ExecuteScalar:返回结果集的第一行第一列,忽略其他行。