java sbyte_JAVA与c#中byte取值范围的差异
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取值范围的差异相关推荐
- java中 byte 取值范围_【二进制基础-java中byte的取值范围-推导过程】
java中用补码表示二进制数,补码的最高位是符号位,最高位为"0"表示正数,最高位为"1"表示负数. 正数补码为其本身: 负数补码为其绝对值各位取反加1: 例如 ...
- java中 byte 取值范围_java中为什么byte的取值范围是-128到+127
概念:java中用补码表示二进制数,补码的最高位是符号位,最高位为"0"表示正数,最高位为"1"表示负数. 正数补码为其本身: 负数补码为其绝对值各位取反加1: ...
- Java Byte取值范围
Java Byte 的取值范围大家都知道(-128 ~ 127),那么-128 和 127 这两个数是怎么计算的呢? #大学知识回顾: 概念:负数的补码是该 数 绝 对 值 的 原 码 按 位 取 反 ...
- java enumerator_java 中遍历取值异常(Hashtable Enumerator)解决办法
java 中遍历取值异常(Hashtable Enumerator)解决办法 用迭代器取值时抛出的异常:java.util.NoSuchElementException: Hashtable Enum ...
- java中integer的范围_java中integer取值范围是什么
java中integer取值范围是什么 发布时间:2020-08-27 10:01:14 来源:亿速云 阅读:69 作者:小新 这篇文章给大家分享的是有关java中integer取值范围是什么的内容. ...
- 为什么byte取值-128~127??
转载自 为什么byte取值-128~127?? java设计byte类型为1个字节,1个字节占8位,即8bit,这是常识. 另外,计算机系统中是用补码来存储的,首位为0表示正数,首位为1表示负数,所以 ...
- java存储整数,用于存储整数数值的是 JAVA四种整数数据类型的取值范围分别是多少...
JAVA四种整数数据类型的取值范围分别是多少 byte的取值范围为-128~127,占用1个字节(-2的7次方到2的7次方-1) short的取值范围为-32768~32767,占用2个字节(-2的1 ...
- 汇编语言-016(SCASB 、STOSB 、LODSD 、数组中的取值、二维数组操作、冒泡排序和二分查找、CMPSW )
1: SCASB : (字节)将AL的值与EDI寻址的一个字比较.进行在一个字符串检索特定的字符 .386 .model flat,stdcall.stack 4096 ExitProcess PRO ...
- 教你如何使用Java代码从网页中爬取数据到数据库中——网络爬虫精华篇
文章目录 1:网络爬虫介绍 2:HttpClients类介绍 2.1 HttpGet参数问题 2.2 HttpPost参数问题 2.3 连接池技术问题 3:Jsoup介绍 4:动手实践如何抓取网页上数 ...
最新文章
- [codeVS1204] 单词背诵
- STL Priority_Queue
- 来自 IsayNo (@IsayNooo) 的推文
- 我的Go+语言初体验——(6)整型有理数数据类型
- 华为云容器部署WordPress服务
- Nodejs 了解web服务器
- 【STM32】STM32CubeMX教程--功能介绍
- java jolt tuxedo_Java通过Jolt调用Tuxedo服务
- Python中的break和continue的使用方法
- uniapp全局传值方式总结
- 连发12款软硬件产品 瑞星领跑企业级安全市场
- 内置googletts并且内置中文语音包
- HP惠普打印机双面打印及常规操作
- 【STM32CubeMX+Keil+PROTEUS】之---4*4键盘仿真驱动
- 微信企业号回调 php,PHP微信企业号回调模式的开启与用法实例分享
- opencv------绘制文本
- 实现WDF的I/O队列
- 全国计算机四级之网络工程师知识点(四)
- 深度优先和广度优先区别
- 设置邮件规则,轻松整理你的收件箱!