JavaScript:有符号整数与无符号整数相互转化

确实巧妙:原文http://blog.csdn.net/kandyer/article/details/8241937

<script language="JavaScript">
<!--
    var signed, unsigned;
    signed = -1;
    unsigned = signed>>>0;
    alert ("unsigned="+unsigned);        // unsigned=4294967295
    signed = unsigned << 0;
    alert ("signed="+signed);                // signed=-1
//-->
</script>
代码:
unsigned = signed>>>0;
通过使用无符号右移运算符,位动位数为0,可以将32位有符号整数,转化为32位无符号整数。
signed = unsigned << 0;
通过使用左移运算符,位动位数为0,可以将32位无符号整数,转化为32位有符号整数。
注:JavaScript的所有位操作都是先将操作对象转化为32位有符号数进行的。具体的细节可以去查Ecma-262规范(JavaScript 的正式名称是 "ECMAScript",其语法由Ecma-262规范描述)。

时间: 2024-08-08 17:48:40

JavaScript:有符号整数与无符号整数相互转化的相关文章

有符号整数比较v.s.无符号整数比较

本文尝试从汇编的角度给出有符号整数比较与无符号整数比较的区别所在. 在<深入理解计算机系统>(英文版第二版)一书中的Page#77,有下面一个练习题: 将上述示例代码写入foo1.c文件,运行并分析bug产生的代码行. 1. foo1.c 1 #include <stdio.h> 2 3 float sum_elements(float a[], unsigned length) 4 { 5 int i; 6 float result = 0; 7 for (i = 0; i &l

为何八位有符号整数的范围是-128~127,而不是-127~128

八位的带符号的整数,比如JAVA中的byte,c#中的SByte,为什么值域范围都是-128-127而不是-127~128? 事实上,远古时期有些计算机的设计是采用了反码表示有符号数的,因此8位有符号数的范围是-127~127,它的一个缺点是0是有正负.它用一位表示正负数,然对剩余的位数采用取反. 比如,0111 1111表示127,那-127的则是1000 0000.0000 0000表示正的0,而1111 1111则表示成为负0.因此反码作为有符号的整数并未流行. 现在的计算机中,通常将正数

有符号整数类型的范围问题

符号整数类型的范围: 整数类型:byte,short,int,long byte: 8 位 -128--->127 short 16位 -32768--->32767 int   32位 -2147483648-->2147483647 long  64位  -9223372036854775808 --> 9223372036854775807 为什么是这样这样的范围: 原码:讲一个数转换为二进制,加上符号位就是原码(0表示整数,1表示负数) 反码:整数的反码就是其原码,负数的反

有符号整数(int)的汉语读法。

请实现一个函数,给定一个32为有符号整数(int 类型),函数输出该数字符合汉语习惯的读法.例如:10086 读作 " 一万零八十六". #include<iostream> #include<list> #include<string> #include<stdlib.h> #include<math.h> using namespace std; void m_itoa(int num,list<char> &

JavaScript 无符号位移运算符 &gt;&gt;&gt; 三个大于号 的使用方法

JavaScript 无符号位移运算符 >>> 三个大于号 的使用方法 JavaScript中的无符号位移运算符是用三个大于号来表示的 计算方法 例 100>>>2 100的二进制是 01100100 向右移2位后为 00011001 最后结果为25 100>>>2==25 无符号位移(>>>)和有符号位移(>>)的区别是 有符号位移运算时如果数字为正数时位移后在前面补0,为负数时则在位移后在前面补1 例 100>&

无符号整数和有符号整数

源码:将一个整数换算成二进制,就是其源码. 反码:正数的反码就是其源码,负数的反码是除符号位每一位取反. 补码:整数的补码就是其源码,负数的反码+1就是其补码. 1 #include<stdio.h> 2 int main() 3 { 4 unsigned int a=6; 5 int b=-20; 6 printf("%d\n",a+b); 7 (a+b)>6? puts(">6"):puts("<=6"); 8

关于有符号整数的补码编码的一点经验

以一个字节(8位)编码为例,如果采用补码,则表示的整数(有符号数)范围是[-128,127]. 如果把该二进制编码表示为十进制,则8位编码对应的十进制为0-255,(或者说表示为无符号数就是0-255) 其中[0-127]表示正整数,也是该数本身(对应的无符号数和有符号数一样且都是正整数),绝对值递增 [128-255]表示负整数,其中128表示-128 ,255 表示 -1,也就是说绝对值是递减的. 所以根据编码快速求出编码前的数的方法之一是:如果编码为0-127,那么编码前的数也是0-127

javascript 中$符号是代表什么意思!

$符号在php中是表示变量的特征字符, 在js中它也有很多作用, 一般我们用来命名一个函数名称,获取id的 1. 首先可以用来表示变量, 比如变量 var s='asdsd'或var $s='asdasd'; 2. 在正则表达式中,它可以匹配结尾 /sa$/.test(string) 匹配string字符串中的sa,比如string='125sa'则匹配,string='125sa21'则不匹配 正则表达式很复杂,这里只是简单的说说. 3. 由于受prototype.js(老外写的框架,用于将一

C#Winform基础 八进制数转换为十进制数(无符号,整数,正数)

镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ 1 UI 2 code 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using S