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:,byte.max:,1byte
sbyte.max:-,sbyte.min:,1byte
字节序列一般依赖于硬件,我们常用的intel cpu是小端的,而 java字节序列默认是bigEndian 大端模式
java中的byte是有符号类型的,对应c#的sbyte
@Test
public void test()
{
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(byte b) {
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与c#中byte取值范围的差异的更多相关文章
- java中byte取值范围为什么是 -128到127
概念:java中用补码表示二进制数,补码的最高位是符号位,最高位为“0”表示正数,最高位为“1”表示负数.正数补码为其本身:负数补码为其绝对值各位取反加1:例如:+21,其二进制表示形式是000101 ...
- [java面试]javascript中dom取值问题radio名字一样归属于同一个组,求点击的是哪一个
题目描述: 看如下的html文件,里面定义了一些radio类型的元素,请完成parse()函数的内容,要求能够弹出对话框提示当前选中的是第几个单选框. </pre><pre code ...
- Java Byte取值范围
Java Byte 的取值范围大家都知道(-128 ~ 127),那么-128 和 127 这两个数是怎么计算的呢? #大学知识回顾: 概念:负数的补码是该 数 绝 对 值 的 原 码 按 位 取 反 ...
- js 定义像java一样的map方便取值【转】
js 定义像java一样的map方便取值. 百度有位大神说"js对象本身就是一种Map结构",这真是一段让人欢天喜地的代码. <script> //定义一个全局map ...
- Loadrunner中参数化取值方式分析
Loadrunner中参数化取值依赖两个维度: 1.取值顺序分为“顺序”“随机”“唯一”. select next row:Sequential , Random,unique 2.更新值时分为 ...
- Laravel 中 Session 的使用问题(dd()导致laravel中session取值问题)
Laravel 中 Session 的使用问题(dd()导致laravel中session取值问题) 一.总结 一句话总结: Laravel 会首先收集需要写入 Session 的所有数据,并在用户的 ...
- Java进阶(十一)部分数据类型取值范围
java整型byte,short,int,long取值范围大小 在项目开发中,需要用到随机数的生成方法,代码如下: public static String randomizeNumber(int n ...
- Java连载10-数据类型取值范围&转义字符
一.数据类型取值范围 二.八种数据类型在成员变量中的默认值 (1)成员变量,没有赋值,编译不会报错,系统会自动给赋值 byte\int\short\long默认值为0:float\double默认值为 ...
- 浅析mybatis中${}和#{}取值区别
mybatis作为一个轻量级的ORM框架,应用广泛,其上手使用也比较简单:一个成熟的框架,必然有精巧的设计,值得学习. 在使用mybatis框架时,在sql语句中获取传入的参数有如下两种方式: ${p ...
随机推荐
- texture2dArray
https://medium.com/@calebfaith/how-to-use-texture-arrays-in-unity-a830ae04c98b http://cdn.imgtec.com ...
- Unrecognized SSL message, plaintext connection? 将https 换为http 即可
请求链接:https://59********* 升级后的项目地址有https换为了http ,出现这个错误,改为http请求即可
- IDEA Java
目录 1 配置 2 常用快捷键 3 安装插件 4 使用Maven创建web项目 5 使用Maven导入依赖 6 Maven创建项目后缺少文件夹 7 Tomcat LocalHost Log消失 8 E ...
- Educational Codeforces Round 33 (Rated for Div. 2) A题
A. Chess For Three Alex, Bob and Carl will soon participate in a team chess tournament. Since they a ...
- yarn是什么?
yarn是个包管理器.你可以通过它使用全世界开发者的代码, 或者分享自己的代码. 从 npm 安装软件包并保持相同的包管理流程. 优点: 1.速度超快. Yarn 缓存了每个下载过的包 ...
- 如何在 Laravel 中灵活的使用 Trait
如何在 Laravel 中灵活的使用 Trait Laravel/ 3个月前/ 1740 / 4 / 更新于 3个月前 @这是小豪的第九篇文章 好久没有更新文章了,说好了周更结果还是被自己对 ...
- which/whereis
which 查找二进制命令,按环境变量PATH路径查找 whereis 查找二进制命令,按环境变量PATH路径查找 查询命令的安装路径,配置文件路径
- 新西达电调初始化代码,使用nodejs ffi技术调用wiringpi,代码使用typescript编写
这是我设计的F450四轴飞行器飞控代码的一部分 运行在orangepi-zero上,操作系统是armbian,思路是使用node-ffi调用wiringpi的so库与GPIO通信,然后控制端逻辑代码使 ...
- 转载一篇比较详细的讲解html,css的一篇文章,很长
转载自这里,转载请注明出处. DIV+CSS系统学习笔记回顾 第一部分 HTML 第一章 职业规划和前景 职业方向规划定位: web前端开发工程师 web网站架构师 自己创业 转岗管理或其他 ...
- c 判断一个字符是否为字母
#include <stdio.h> #include <wctype.h> int main () { ; wchar_t str[] = L"C++"; ...