当前位置:  开发笔记 > 编程语言 > 正文

C#数字常量

如何解决《C#数字常量》经验,为你挑选了4个好方法。

我有以下C#代码:

byte rule = 0;
...
rule = rule | 0x80;

产生错误:

无法将类型'int'隐式转换为'byte'.存在显式转换(您是否错过了演员?)

[更新:问题的第一个版本错了......我误读了编译器输出]

添加强制转换不能解决问题:

rule = rule | (byte) 0x80;

我需要把它写成:

rule |= 0x80;

这看起来很奇怪.为什么|=操作员与操作员有什么不同|

有没有其他方法告诉编译器将常量视为一个字节?


@ Giovanni Galbo:是的,不是.该代码处理外部设备中闪存的编程,逻辑上代表单个字节的存储器.我可以稍后施展,但这似乎更明显.我想我的C传承太多了!

@ Jonathon Holland:'as'语法看起来更整洁但不幸的是看起来不起作用......它产生:

as运算符必须与引用类型或可空类型一起使用('byte'是不可为空的值类型)

Eric Z Beard.. 34

C#没有字节的文字后缀.u = uint,l = long,ul = ulong,f = float,m =十进制,但没有字节.你必须施展它.



1> Eric Z Beard..:

C#没有字节的文字后缀.u = uint,l = long,ul = ulong,f = float,m =十进制,但没有字节.你必须施展它.


那是怎么发生的?
user:它没有定义为c#语言规范.这里有一个例子:http://msdn.microsoft.com/en-us/library/5bdb6693(VS.80).aspx你可以像这个例子一样声明和初始化一个字节变量:byte myByte = 255; 在前面的声明中,整数文字255被隐式地从int转换为byte.如果整数文字超出字节范围,则会发生编译错误.

2> jmatthias..:

这有效:

rule = (byte)(rule | 0x80);

显然是表达'规则| 即使将0x80定义为'const byte 0x80',0x80'也会返回一个int.



3> FlySwat..:

您正在寻找的术语是"Literal",不幸的是C#没有字节文字.

这是所有C#文字的列表.



4> David J. Sok..:
int rule = 0;
rule |= 0x80;

http://msdn.microsoft.com/en-us/library/kxszd0kx.aspx的| operator是为所有值类型定义的.我认为这会产生预期的结果."| ="运算符是一个或那么赋值运算符,它只是rule = rule |的简写 0x80的.

关于C#的最重要的事情之一就是它可以让你根据它们的大小做滥用价值类型等疯狂的事情.'int'与字节完全相同,但如果您尝试将它们同时用作两者,编译器将抛出警告.简单地坚持使用一个(在这种情况下,int)效果很好.如果你担心64位准备就绪,你可以指定int32,但所有的int都是int32s,甚至在x64模式下运行.


int是Int32的C#别名,绝对不是一个字节.JIT编译器是平台感知的,所以我们不需要.本机字大小,寻址和针对各种本机原语的操作效率更可能涉及它如何在底层系统中分配托管数据(包括"原语").考虑可以为.NET Micro和.NET CF编译相同的代码(针对手机的ARM和针对XBox 360的PowerPC).这些系统甚至可以用不同的字节表示它们的数字,这对二进制操作有重大影响.
推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有