C#byte类型
byte类型的范围是0~255
转换为二进制是00000000~11111111
----------------------------------------------------------
C#中对byte类型的处理还是很特殊的。
下面用几行简单的代码来说明问题
byte x=1;
byte y=2;
byte z=x+y; //error:无法将int类型转换为byte类型
1.可能很多会认为这段代码没有问题,实际上第三行会产生编译错误:无法将int类型转换为byte类型!
2.因为C#编译器会认为byte类型和byte类型运算的结果是int型,实际上对short类型也做了相似的处理。
3.至于为什么这样设计,因为byte或short类型相互运算比较容易发生溢出,所以在运算的时候直接都转换为int来运算了。
4.再看下面的代码
byte i=1; //OK
这里的字面值1是被编译器识别为int类型的,在以上声明中,整数1
从 int 类型隐式转换为 byte 类型。如果整数超出了 byte 类型的范围,则将发生编译错误。
5.上面是MSDN中的说法,实际上这个隐式转换违背了范围小的类型可以隐式转换为范围大的类型这条规则,但是在C#中这个转换的确是合法的。
注意这个转换只有用整型的字面值来赋值运算的时候才成立,像这样就不可以了
int x=1;
byte i=x; //error: 无法将int类型转换为byte类型
6.在看下面的代码:
byte i=1;
i+=1; //OK
这行代码是可以通过的,原因是C#中x+=y并不是总相当于x=x+y的!
如果x+y的结果的类型可以隐式转换为x的类型,那么x+=y相当于x=x+y
如果x+y的结果的类型可以显式转换为x的类型,并且x=y也合法,那么x+=y相当于x=(T)(x+y),其中T是x的类型。
7.就像上面这行代码,i+1是int类型的,可以显式转换为byte类型,而i=1也合法,所以i+=1就相当于i=(byte)(i+1)
i=i+1; //error:无法将int类型转换为byte类型
这行比较容易理解,1被编译器识别为int类型,所以i+1的结果是int类型的,无法将int类型转换为byte类型
C#byte类型的更多相关文章
- C# 读取 timestamp 时间戳 值为byte[] 类型时转换为时间戳字符串
C# 中如何读取出来的时间戳为 byte[] 类型的话,用以下方式转换成 16进制字符串 string tmpUfts = "0x"+ BitConverter.ToString( ...
- int类型和byte类型的强制类型转换
今天在读<Java网络编程>这本书的第二章 流 时,看到书中有一个地方关于int强制转换为byte类型时应注意的地方.这个地方有点细节,不过就应该把这种细节把握住. 情况是这样的,讲到In ...
- int类型被强制转换成较低精度的byte类型
公司的项目上线之前会进行代码合规性检查,其中很容易违反的一个规则就是“不要把原始类型转换成较低的精度”,实际开发的过程中,很多方法在处理数据时,尤其在做移位操作的时候,难免要把int类型转换成byte ...
- C++开发中BYTE类型数组转为对应的字符串
下午密码键盘返回了一个校验码,是BYTE类型数组,给上层应用返回最好是字符串方式,怎样原样的将BYTE数组转为string串呢?不多说,开动脑筋上手干!!! BYTE格式的数组bt{08,D7,B4, ...
- 详解java中的byte类型
Java也提供了一个byte数据类型,并且是基本类型.java byte是做为最小的数字来处理的,因此它的值域被定义为-128~127,也就是signed byte.下面这篇文章主要给大家介绍了关于j ...
- go语言byte类型报错cannot use "c" (type string) as type byte in assignment
练习Go修改字符串的时候遇到这个问题:cannot use "c" (type string) as type byte in assignment,代码如下: package m ...
- int类型转换byte类型
计算机中,int类型占用4个字节,byte类型占用1个字节: 当int类型强转为byte类型时,计算机会截取最后的八位(1个字节): 由于计算机存储数据时,都是以补码的形式进行存储. 然而,我们通常看 ...
- C#基础蛋疼到爆的Byte类型表数范围之网兜毛衣见解……
事实上写这篇对Byte类型表数范围的文章,真的是蛋疼+蛋疼+蛋疼,每每看到Byte表数范围这一块.都对-128如此的陌生与迷茫.操蛋的Byte,操蛋的人生-- 熊孩子出场:Byte 恶作剧结果:表数范 ...
- Java 中 byte 类型初始化问题
很早的时候由于工作需要,接触过一点 Java,于是有了这个坑,今天回头看到自己在 Stackoverflow 上提的问题发现了它,于是再记录下. 在使用中,需要将 byte 类型的的每一位都置 1.我 ...
随机推荐
- Cookie操作-----Selenium快速入门(十一)
什么是cookie?顾名思义,就是饼干,小甜饼.而根据读音则是“曲奇”的意思,相信不少的人都吃过.而在网络上,cookie是指浏览器在本地的一种少量数据的存储方式.例如,我们常见的,登陆的时候有个ch ...
- C# Lock锁(个人随记)
先看看为什么要用锁 需求:多线程处理值的加减 static int NoLockData = 0; public static void NoLockNormalTest(int threadIn ...
- Windows Phone中解决多模块多程序集之间相互循环引用的问题一种思路
Windows Phone中解决多模块多程序集之间相互循环引用的问题一种思路 那就是利用mvvmlight中的messager组件(可单独提取出),制作双向的一个消息发送.通过公共的类的定义,来传递数 ...
- log Log4NET配置
Log4Net是用来记录日志的,可以将程序运行过程中的信息输出到一些地方(文件.数据库.EventLog等),日志就是程序的黑匣子,可以通过 日志查看系统的运行过程,从而发现系统的问题.日志的作用:将 ...
- 内置装饰器二:@property
property 装饰器的作用 property 装饰器将方法包装成属性,将私有属性公有化,此属性只能被读取.相当于实现get方法的对象 class People: def __init__(self ...
- “全栈2019”Java多线程第二十六章:同步方法生产者与消费者线程
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- Manacher算法学习笔记
前言 Manacher(也叫马拉车)是一种用于在线性时间内找出字符串中最长回文子串的算法 算法 一般的查找回文串的算法是枚举中心,然后往两侧拓展,看最多拓展出多远.最坏情况下$O(n^2)$ 然而Ma ...
- 3.jquery在js文件中获取选择器对象
一.常用的选择器有一下几种: 1.标签选择器 2.类选择器 3.id选择器 4.并集选择器 5.层级选择器 二.如何获取选择器对象: <!DOCTYPE html> <html la ...
- java-斐波那契数列的解法
public class Feibo { static long[] temp = new long[1000000]; static long fun1(int n){ if(temp[n]!=0) ...
- linux系统上内网ip和和外网ip的关系
1.不同服务之间的访问需要使用公网IP+端口才能访问 2.服务器上一般都是域名访问,服务器会把ip+端口映射成固定的域名,所以如果想访问服务器上其他应用,就必须的放开应用限制 问题,在服务器上放开对某 ...