C# 怎么把减去一个负数数用一个字节的byt...

通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String
[问题点数:40分,结帖人woshikaka6]
通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String
[问题点数:40分,结帖人woshikaka6]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
2013年12月 Web 开发大版内专家分月排行榜第三
2013年12月 Web 开发大版内专家分月排行榜第三
2013年12月 Web 开发大版内专家分月排行榜第三
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'BlockRead:从一个无类型二进制文件中读取一块数据记录',
blogAbstract:'声明:
procedure BlockRead ( var FileHandle : F var B RecordCount : Integer {; var RecordsRead : Integer} ) ;
描述:BlockRead从一个由FileHandle给定的无类型二进制文件中,读取RecordCount数量的数据记录到Buffer缓冲中。文件必须先用AssignFile指定,再由Reset打开。
Reset子程序打开文件,默认的记录大小是128字节。当然,记录大小也可以由用户自行指定(见例子代码)。
数据从文件中读出并被写入到Buffer(通常是一个字符串或字节数组)中。如果记录大小是10字节、RecordCount是3,那么有3 x 10? 个字节被写入,文件中读取了30个字节。',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:6,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}如何设计一个一百亿的计算器-杭州达内分享--达内-杭州达内_达内科技_杭州PHP培训_Java_Andriod培训_ios培训_杭州软件测试培训_安卓培训怎么样
>>新闻中心   
首页>>>>如何设计一个一百亿的计算器-杭州达内分享
如何设计一个一百亿的计算器-杭州达内分享
如何设计一个一百亿的计算器-杭州达内分享
&&&&& 杭州达内分享如何设计一个一百亿的计算器。
&&&&&&首先,计算机中用固定数量的几个字节来存储的数值,所以计算机中能够表示的数值是有一定的范围的,为了便于讲解和理解,我们先以byte 类型的整数为例,它用1个字节进行存储,表示的最大数值范围为-128到+127。-1在内存中对应的二进制数据为,如果两个-1相加,不考虑Java运算时的类型提升,运算后会产生进位,二进制结果为1,,由于进位后超过了byte类型的存储空间,所以进位部分被舍弃,即最终的结果为,也就是-2,这正好利用溢位的方式实现了负数的运算。-128在内存中对应的二进制数据为,如果两个-128相加,不考虑Java运算时的类型提升,运算后会产生进位,二进制结果为1,,由于进位后超过了byte类型的存储空间,所以进位部分被舍弃,即最终的结果为,也就是0,这样的结果显然不是我们期望的,这说明计算机中的算术运算是会发生越界情况的,两个数值的运算结果不能超过计算机中的该类型的数值范围。由于Java中涉及表达式运算时的类型自动提升,我们无法用byte类型来做演示这种问题和现象的实验,大家可以用下面一个使用整数做实验的例子程序体验一下:&&int a = Integer.MAX_VALUE;&&int b = Integer.MAX_VALUE;&&int sum = a +&&System.out.println(“a=”+a+”,b=”+b+”,sum=”+sum);
&&&&& 先不考虑long类型,由于int的正数范围为2的31次方,表示的最大数值约等于2*00,也就是20亿的大小,所以,要实现一个一百亿的计算器,我们得自己设计一个类可以用于表示很大的整数,并且提供了与另外一个整数进行加减乘除的功能,大概功能如下:()这个类内部有两个成员变量,一个表示符号,另一个用字节数组表示数值的二进制数()有一个构造方法,把一个包含有多位数值的字符串转换到内部的符号和字节数组中()提供加减乘除的功能public class BigInteger{&&&&byte[]&&public Biginteger(String val)&{&&&sign = ;&&&val = ;&&}&&public BigInteger add(BigInteger other)&{&&&&&}&&public BigInteger subtract(BigInteger other)&{&&&&&}&&public BigInteger multiply(BigInteger other){&&&&&}&&public BigInteger divide(BigInteger other){&&&&&}
}&&&&& 备注:要想写出这个类的完整代*,是非常复杂的,如果有兴趣的话,可以参看jdk中自带的java.math.BigInteger类的源*。
>>热招中!
>>热招中!
>>热招中!</
>>热招中!
先就业后付款”,高端,,,助您就业国内外IT名企! 
地址:杭州市西湖区教工路6―8号求是大厦10楼B 联系电话:8 备案号: 京ICP备号-20当前位置: >
> 新手刚来:我有一个jpg图在一个byte数组内请问如何用PictureBox显示我有一个jpg图在
新手刚来:我有一个jpg图在一个byte数组内请问如何用PictureBox显示我有一个jpg图在
lvyuan & at
新手刚来:我有一个jpg图在一个byte数组内请问如何用PictureBox显示我有一个jpg图在一个byte数组内请问如何用PictureBox显示,最好能有关键代码
Public Declare Function CreateStreamOnHGlobal Lib
&ole32 & (ByVal hGlobal As Long, ByVal fDeleteOnRelease As Long, ppstm As Any) As Long
Public Declare Function OleLoadPicture Lib
&olepro32 & (pStream As Any, ByVal lSize As Long, ByVal fRunmode As Long, riid As Any, ppvObj As Any) As Long
Public Declare Function CLSIDFromString Lib
&ole32 & (ByVal lpsz As Any, pclsid As Any) As Long
Public Declare Function GlobalAlloc Lib
&kernel32 & (ByVal uFlags As Long, ByVal dwBytes As Long) As Long
Public Declare Function GlobalLock Lib
&kernel32 & (ByVal hMem As Long) As Long
Public Declare Function GlobalUnlock Lib
&kernel32 & (ByVal hMem As Long) As Long
Public Declare Function GlobalFree Lib
&kernel32 & (ByVal hMem As Long) As Long
Public Declare Sub CopyMemory Lib
&kernel32 & Alias
&RtlMoveMemory & (Destination As Any, Source As Any, ByVal Length As Long)
&#39;**************************************************************
&#39; 参数说明:
&#39; bImageData(): 保存图像信息的字节数组。
&#39; 返回值:
&#39; 返回转换后的 IPictreDisp 对象。
&#39;**************************************************************
Public Function GetPictureFromByteStream(bImageData() As Byte) As IPicture
Dim lngByteCount As Long
Dim hMem As Long
Dim lpMem As Long
Dim IID_IPicture(15)
Dim IStream As stdole.IUnknown
On Error GoTo Err_Init
lngByteCount = UBound(bImageData) + 1
&#39; 计算数组大小
hMem = GlobalAlloc(&H2 Or GMEM_ZEROINIT, lngByteCount)
&#39; 按数组大小分配一块内存空间
&#39; &#39; 若分配内存成功
lpMem = GlobalLock(hMem)
&#39; 锁定内存, 返回第一块的指针
CopyMemory ByVal lpMem, bImageData(0), lngByteCount
Call GlobalUnlock(hMem)
If CreateStreamOnHGlobal(hMem, 1, IStream) = 0 Then
If CLSIDFromString(StrPtr( &{7BF80980-BF32-101A-8BBB-00AA00300CAB} &), IID_IPicture(0)) = 0 Then
Call OleLoadPicture(ByVal ObjPtr(IStream), lngByteCount, 0, IID_IPicture(0), GetPictureFromByteStream)
GlobalFree hMem
Exit Function
MsgBox Err.Number &
& & Err.Description
End Function
把图像数据存入字节数组,按如下调用即可:
set picture1.picture=GetPictureFromByteStream(bytData())lvyunxian & &
& & (0)(0)
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&&&湘教QS2-164&&增值电信业务经营许可证湘B2-当前位置: >
> 怎么将一个字节的数据,使用vb转换成两个ascii码
怎么将一个字节的数据,使用vb转换成两个ascii码
huixhui & at
如何将一个字节的数据,使用vb转换成两个ascii码我这两天使用通讯协议分析软件(我多年前用qbasic编写的)分析了一下日本fanuc plc eprom读写器 fa-writer。发现它在读、写eprom时,将读出的eprom中的一个字节,按照高4位、低四位转换成两个相应的ascii码,从串口发送或接收。例如: & (hex)
(ascii) &eprom内容
发送的内容 &
'做了 parity 处理、补偶了。补偶前应为 31
34。vb 能够将一个字节的内容转换成两个对应的ascii 吗?任何方式的帮助,都将非常感谢!
分析一下,都加了300
huixin87 & &
& & (0)(0)引用不补偶的:  VB code  dim n as byte, n1 as byte, n2 as byte
n1 = (n \ &H10) + &H30
n2 = (n mod &H10) + &H30
debug.print hex(n1), hex(n2)
huixiaolin & &
& & (0)(0)引用
  VB code  Public Function HexToAsc(bytHex As Byte) As String
Dim i As Long
i = bytHex \ 16
If i & 9 Then
HexToAsc = Chr(i - 10 + &H41)
HexToAsc = Chr(i + &H30)
i = bytHex Mod 16
If i & 9 Then
HexToAsc = HexToAsc & Chr(i - 10 + &H41)
HexToAsc = HexToAsc & Chr(i + &H30)
End Function
Public Function HexToAsc2(bytHex As Byte) As Byte()
Dim i As Long
Dim bytAsc(0 To 1) As Byte
i = bytHex \ 16
If i & 9 Then
bytAsc(0) = i - 10 + &H41
bytAsc(0) = i + &H30
i = bytHex Mod 16
If i & 9 Then
bytAsc(1) = i - 10 + &H41
bytAsc(1) = i + &H30
HexToAsc2 = bytAsc
End Function
Private Sub Command1_Click()
Dim byt() As Byte
byt = HexToAsc2(&HD)
Print Chr(byt(0)); Chr(byt(1))
Private Sub Command2_Click()
Print HexToAsc(&HD)
huixiaoman & &
& & (0)(0)引用大家注意一下:十六进制 A = 10 ,而不是 11。楼主试一下这段代码:  VB code  Private Function ByteToHexStr(Num As Byte) As String
Dim i%, strBH$
i = Num \ 16 + 48
If (i & 57) Then i = i + 7
strBH = Chr$(i)
i = (Num And 15) + 48
If (i & 57) Then i = i + 7
ByteToHexStr = strBH & Chr$(i)
End Function
Private Sub Command1_Click()
Debug.Print ByteToHexStr(&H1A)
Debug.Print ByteToHexStr(&H35)
Debug.Print ByteToHexStr(&HEF)
huixinzhuanyi & &
& & (0)(0)引用探讨我试了chen8013的程序。可能我的问题没有问清楚?!应该是如下内容,就满足需要了.0-9 用 31,32,33,....39表示&#160; A-F 用 41,42,43,44,45,46来表示 (在这里先不考虑补偶处理)&#160; hex&#160; &#160; &#160; &#160; output code&#160; 1A&#160; &#160; &#160; &#160; &#160; &#160; 31 41&#160; 35&#160; &#160; &#160; &#160; &#160; &#160; 33 35&#160; EF&#160; &#160; &#160; &#160; &#160; &#160; 45 46多谢各位!
navylq & &
& & (0)(0)引用其实很简单。它是把一个字节的内容当作字符来处理的:0A: Asc(&0&) = &H30, Asc(&A&) = &H41因此,不需要楼上的复杂函数,只要Dim a() As Bytea = StrConv(Right(&0& & Hex(b), 2), vbFromUnicode)试试:Dim a() As ByteDim b As Byteb = &HAa = StrConv(Right(&0& & Hex(b), 2), vbFromUnicode)Debug.Print Hex(a(0))Debug.Print Hex(a(1))
navyshi & &
& & (0)(0)引用Right(&0& & Hex(b), 2) 是为了保证十六进制有 2 个字符。因为 Hex() 是自动去除前导 0 的:navyyu & &
& & (0)(0)引用
本问题标题:
本问题地址:
温馨提示:本问答中心的任何言论仅代表发言者个人的观点,与希赛网立场无关。请对您的言论负责,遵守中华人民共和国有关法律、法规。如果您的言论违反希赛网问答中心的规则,将会被删除。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&&&湘教QS2-164&&增值电信业务经营许可证湘B2-}

我要回帖

更多关于 减去一个负数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信