C#中分有符号类型的sbyte和无符号类型的byte

Console.WriteLine("byte.min:{0},byte.max:{1},{2}byte", byte.MinValue,byte.MaxValue, sizeof(byte));

Console.WriteLine("sbyte.min:{0},sbyte.max:{1},{2}byte", sbyte.MinValue, sbyte.MaxValue,sizeof(sbyte));

输出

byte.min:0,byte.max:255,1byte

sbyte.max:-128,sbyte.min:127,1byte

字节序列一般依赖于硬件,我们常用的intel cpu是小端的,而 java字节序列默认是bigEndian 大端模式

java中的byte是有符号类型的,对应c#的sbyte

@Testpublic voidtest()

{

System.out.printf("byte.min:%s, byte.max:%s,%dbyte\n",Byte.MIN_VALUE,Byte.MAX_VALUE,Byte.BYTES);

}

输出:

byte.min:-128, byte.max:127,1byte

Java中因为没有无符号类型的 unsigned byte,需要转换,才用的是扩容处理办法,一般建议用short。

因为java里面数值转换都会转换成int,此处返回值用int

public static int unsignedToBytes(byteb) {return b & 0xFF;

}

转换过程:

例如:将 有符号的byte -37转无符号的数值,java里面数值运算会先装int,所以有符号类型的-37变成如下形式

int i = 0x000000FF & i;

11111111 11111111 11111111 11011011 = 有符号类型 int -37

00000000 00000000 00000000 11111111 = 0x000000FF的掩码

00000000 00000000 00000000 11011011 = & 运算结果219

最终结果219

其他参考

原理:(出处:https://www.jianshu.com/p/db85f033e75c)

正如上述我们看到的代码所示:

int luminance = row[x] & 0xFF;

首先widening类型。将byte声明为short或者int类型。然后与0xFF取&即可。

下面,具体说明这样做的原理。

0xff 表示为二进制就是 1111 1111。在signed byte类型中,代表-1;但在short或者int类型中则代表255.

当把byte类型的-1赋值到short或者int类型时,虽然值仍然代表-1,但却由1111 1111变成1111 1111 1111 1111.

再将其与0xff进行掩码:

-1: 11111111 1111111

0xFF: 00000000 1111111

255: 00000000 1111111

所以这样,-1就转换成255.

java sbyte_JAVA与c#中byte取值范围的差异相关推荐

  1. java中 byte 取值范围_【二进制基础-java中byte的取值范围-推导过程】

    java中用补码表示二进制数,补码的最高位是符号位,最高位为"0"表示正数,最高位为"1"表示负数. 正数补码为其本身: 负数补码为其绝对值各位取反加1: 例如 ...

  2. java中 byte 取值范围_java中为什么byte的取值范围是-128到+127

    概念:java中用补码表示二进制数,补码的最高位是符号位,最高位为"0"表示正数,最高位为"1"表示负数. 正数补码为其本身: 负数补码为其绝对值各位取反加1: ...

  3. Java Byte取值范围

    Java Byte 的取值范围大家都知道(-128 ~ 127),那么-128 和 127 这两个数是怎么计算的呢? #大学知识回顾: 概念:负数的补码是该 数 绝 对 值 的 原 码 按 位 取 反 ...

  4. java enumerator_java 中遍历取值异常(Hashtable Enumerator)解决办法

    java 中遍历取值异常(Hashtable Enumerator)解决办法 用迭代器取值时抛出的异常:java.util.NoSuchElementException: Hashtable Enum ...

  5. java中integer的范围_java中integer取值范围是什么

    java中integer取值范围是什么 发布时间:2020-08-27 10:01:14 来源:亿速云 阅读:69 作者:小新 这篇文章给大家分享的是有关java中integer取值范围是什么的内容. ...

  6. 为什么byte取值-128~127??

    转载自 为什么byte取值-128~127?? java设计byte类型为1个字节,1个字节占8位,即8bit,这是常识. 另外,计算机系统中是用补码来存储的,首位为0表示正数,首位为1表示负数,所以 ...

  7. java存储整数,用于存储整数数值的是 JAVA四种整数数据类型的取值范围分别是多少...

    JAVA四种整数数据类型的取值范围分别是多少 byte的取值范围为-128~127,占用1个字节(-2的7次方到2的7次方-1) short的取值范围为-32768~32767,占用2个字节(-2的1 ...

  8. 汇编语言-016(SCASB 、STOSB 、LODSD 、数组中的取值、二维数组操作、冒泡排序和二分查找、CMPSW )

    1: SCASB : (字节)将AL的值与EDI寻址的一个字比较.进行在一个字符串检索特定的字符 .386 .model flat,stdcall.stack 4096 ExitProcess PRO ...

  9. 教你如何使用Java代码从网页中爬取数据到数据库中——网络爬虫精华篇

    文章目录 1:网络爬虫介绍 2:HttpClients类介绍 2.1 HttpGet参数问题 2.2 HttpPost参数问题 2.3 连接池技术问题 3:Jsoup介绍 4:动手实践如何抓取网页上数 ...

最新文章

  1. [codeVS1204] 单词背诵
  2. STL Priority_Queue
  3. 来自 IsayNo (@IsayNooo) 的推文
  4. 我的Go+语言初体验——(6)整型有理数数据类型
  5. 华为云容器部署WordPress服务
  6. Nodejs 了解web服务器
  7. 【STM32】STM32CubeMX教程--功能介绍
  8. java jolt tuxedo_Java通过Jolt调用Tuxedo服务
  9. Python中的break和continue的使用方法
  10. uniapp全局传值方式总结
  11. 连发12款软硬件产品 瑞星领跑企业级安全市场
  12. 内置googletts并且内置中文语音包
  13. HP惠普打印机双面打印及常规操作
  14. 【STM32CubeMX+Keil+PROTEUS】之---4*4键盘仿真驱动
  15. 微信企业号回调 php,PHP微信企业号回调模式的开启与用法实例分享
  16. opencv------绘制文本
  17. 实现WDF的I/O队列
  18. 全国计算机四级之网络工程师知识点(四)
  19. 深度优先和广度优先区别
  20. 设置邮件规则,轻松整理你的收件箱!

热门文章

  1. MARKDOWN使用小计
  2. 转载 : JSP取得绝对路径
  3. python微信自动回复
  4. angularjs $apply
  5. Android彻底组件化方案实践
  6. 结构体数组(C++)
  7. iphone 随机颜色生成
  8. 为.NET程序批上WPF的绚丽外衣(1)
  9. python 核心编程 第一部分
  10. Python的if判断和两重判断